Src*_*Src 0 ruby ruby-on-rails
inventory创建用户后,我需要在表中创建4条记录.我知道我需要使用回调after_create,但我认为根据最佳实践和DRY原则,这样的4行是不好的:
def create_items
Item.create({user_id: self.id, item_id: 1})
Item.create({user_id: self.id, item_id: 2})
...
end
Run Code Online (Sandbox Code Playgroud)
或者甚至可能那样?
def create_items
self.inventories.create([
{item_id: 1},
{item_id: 2}
])
end
Run Code Online (Sandbox Code Playgroud)
你可以解决这个问题has_many :through:
class Inventory
belongs_to :user
belongs_to :item
end
class User
has_many :inventories
has_many :items, through: :inventories
end
Run Code Online (Sandbox Code Playgroud)
然后你可以直接添加它们:
items.each do |item|
@user.items << item
end
Run Code Online (Sandbox Code Playgroud)
如果您只有ID值:
Item.where(id: ids).each do |item|
@user.items << item
end
Run Code Online (Sandbox Code Playgroud)
这通常足以完成工作.如果你遇到严重的负载问题,你可以随时使用批量插入插件,但这通常是最后的手段.
| 归档时间: |
|
| 查看次数: |
27 次 |
| 最近记录: |