50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
# File 'lib/s3_assets/relations.rb', line 50
def asset_has_and_belongs_to_many(relation_name, options = {})
options[:class_name] = ::S3Assets::Model.to_s
related_doc_klass = options[:class_name].constantize
field_name = "#{relation_name.to_s.singularize}_ids".to_sym
self.instance_eval do
self.has_and_belongs_to_many(relation_name, options)
self.send(:define_method, "#{field_name}=".to_sym) do |asset_ids|
if asset_ids.present?
asset_ids = asset_ids.reject(&:blank?).map do |asset_id|
::S3Assets::Relations::Helpers.proper_asset_id(asset_id, self)
end
end
super(asset_ids)
end
after_save do |doc|
if doc.send("#{field_name}_changed?")
old_related_doc_ids = [doc.send("#{field_name}_was")].flatten.compact.map(&:to_s)
new_related_doc_ids = [doc.send(field_name)].flatten.compact.map(&:to_s)
removed_ids = old_related_doc_ids - new_related_doc_ids
related_doc_klass.where(:_id.in => removed_ids).destroy_all if removed_ids.present?
end
end
after_destroy do |doc|
related_doc_ids = doc.send(field_name)
related_doc_klass.where(:_id.in => related_doc_ids).destroy_all if related_doc_ids.present?
end
end
end
|