0

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

或者

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

您可以使用 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,也许它会更好地满足您的需求。

于 2013-07-24T14:39:04.587 回答