我owners
有很多notes
。我希望将相同的新note
作为单独记录有效地添加到许多所有者,以便我可以在以后更改每个owner
而不会影响其他owners
。
owners
我需要将note
添加到此时仅作为ID列表(从多选列表中选择)。
有没有比以下更有效的方法?
owner_ids = [1,2,3,4]
note = Note.new(params[:note])
owner_ids.each do |owner_id|
Owner.find(owner_id).notes << note
end
OR
owner_ids = [1,2,3,4]
owner_ids.each do |owner_id|
Note.create(owner_id: owner_id, subject: params[:note][:subject], content: params[:note][:content])
end
将Ruby 2与Rails 4一起使用
答案 0 :(得分:1)
owner_ids = [1,2,3,4]
owner_ids.each do |owner_id|
Note.create(params[:note].merge({owner_id: owner_id}))
end
UPD:在交易中包装所有创作也是个好主意。
答案 1 :(得分:1)
您可以使用ActiveRecord事务方法,该方法将在一个事务中执行SQL。这可以节省您的时间
ActiveRecord::Base.transaction do
owner_ids.each do |owner_id|
Note.create(owner_id: owner_id, subject: params[:note][:subject], content: params[:note][:content])
end
end
另请查看activerecord-import gem,或许它会更好地满足您的需求。