将一个子项添加到许多父项

时间:2013-07-24 14:28:18

标签: ruby-on-rails associations

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一起使用

2 个答案:

答案 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,或许它会更好地满足您的需求。