興味深い問題があります。Ruby 1.9.2 と Rails 3.1.3 を使用しています。
簡単にするために、顧客と店舗としましょう。店舗には多くの顧客がおり、顧客は店舗に属しています。私は店舗のすべての顧客を収集し、後で値を設定できる場所をいくつか作成しようとしています。代わりに、予期しないときに customer.save が呼び出されます。
store = Store.find(1)
customers_array = store.customers
random_array = Array.new
customers_count = customers_array.count + 1
(customers_count..2).each do |i|
customer = Customer.new
c.id = "#{i}000000000000"
random_array << customer # this line doesn't call customer.save
customers_array << customer # this line calls customer.save when store has customers
end
何らかの理由で顧客が配列にプッシュされると、customer.save が呼び出されます。配列へのプッシュがプレーンな配列であり、リレーションではない場合は発生しません。
回避策を見つけましたが、なぜそれが起こるのかまだ疑問に思っています。回避策:
store = Store.find(1)
initial_customers_array = store.customers
additional_customers_array = Array.new
customers_count = initial_customers_array.count + 1
(customers_count..2).each do |i|
customer = Customer.new
c.id = "#{i}000000000000"
additional_customers_array << customer
end
customers_array = initial_customers_array + additional_customers_array