创建记录后创建关联

时间:2017-10-10 19:30:27

标签: ruby-on-rails ruby

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

1 个答案:

答案 0 :(得分:5)

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

这通常足以完成工作。如果您遇到严重的负载问题,您可以随时使用批量插入插件,但这通常是最后的手段。