0

私はownersそれをたくさん持っていnotesます。note同じ新しいレコードを個々のレコードとして多くの所有者に効率的に追加してowner、他のレコードに影響を与えずに後で変更できるようにしたいと考えていownersます。

ownersI need to add は、この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

また

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

Rails 4 で Ruby 2 を使用する

4

2 に答える 2

1
owner_ids = [1,2,3,4]
owner_ids.each do |owner_id|
  Note.create(params[:note].merge({owner_id: owner_id}))
end

UPD: すべての作品をトランザクションにラップすることも良い考えです。

于 2013-07-24T14:39:01.520 に答える
1

1 つのトランザクションで SQL を実行する ActiveRecord トランザクション メソッドを使用できます。これにより、時間を節約できます

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も見てください。おそらく、ニーズにより適しているでしょう。

于 2013-07-24T14:39:04.587 に答える