11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
# File 'lib/ar_merge.rb', line 11
def merge!(other, options={})
raise "cannot merge wit a new record" if other.new_record?
raise "cannot merge with myself" if other == self
(options[:associations]||[]).each do |association_name|
other.send(association_name).each do |associated|
send(association_name) << associated
end
counter = "#{association_name}_count"
next unless other.respond_to?(counter) and respond_to?("#{counter}=")
self.class.update_counters(id, counter => other.send(counter))
end
(options[:attributes]||[]).each do |attr|
send("#{attr}=", other.send(attr)) if send(attr).blank?
end
other.reload.destroy
save!
end
|