创建记录后创建关联
问题描述:
创建用户后,我需要在表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
,或者甚至这样呢?
def create_items
self.inventories.create([
{item_id: 1},
{item_id: 2}
])
end
答
奥芬你可以用has_many :through
解决这个问题:
class Inventory
belongs_to :user
belongs_to :item
end
class User
has_many :inventories
has_many :items, through: :inventories
end
然后你可以将它们添加直线上升:
items.each do |item|
@user.items << item
end
如果只有ID值:
Item.where(id: ids).each do |item|
@user.items << item
end
这是一般的Ÿ有效率足以完成工作。如果您遇到严重的负载问题,您可以使用批量插入插件来完成此操作,但这通常是最后一招。
您可以使用范围“[* 1..4] .each do | i |” – TopperH
@TopperH'id'不是为了:(另外,也许我应该使用关联,不要每次都通过user.id? – Src
@TopperH为什么不是'(1..4).each do | i |'? – tadman