创建记录后创建关联

创建记录后创建关联

问题描述:

创建用户后,我需要在表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 
+0

您可以使用范围“[* 1..4] .each do | i |” – TopperH

+0

@TopperH'id'不是为了:(另外,也许我应该使用关联,不要每次都通过user.id? – Src

+0

@TopperH为什么不是'(1..4).each do | i |'? – tadman

奥芬你可以用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 

这是一般的Ÿ有效率足以完成工作。如果您遇到严重的负载问题,您可以使用批量插入插件来完成此操作,但这通常是最后一招。

+0

谢谢你的回复。我的任务是添加这些项目在创建用户后进行清点我怎样才能用你编写的代码来做到这一点? – Src

+0

你可以在你想要的任何地方放置这段代码,即使在'after_create'回调中 – tadman

+0

哦,等一下,现在我明白了)谢谢) – Src