ActiveRecord - 同时构建和保存父/子关联

时间:2016-02-28 17:55:24

标签: ruby-on-rails activerecord

我们说我有一个User模型,每个user has_many pets

如果我要构建新的User模型,如何同时构建关联的Pet

我试过了 -

user = User.new(name: "Foo Bar", age: 27)
pet_attributes = { type: "dog", breed: "Golden Retreiver" }
pet = user.pets.build(pet_attributes)
user.save!

上述操作失败,因为Pet模型有一个外键 - user_id - 在构建对象时没有填充。它不可能,因为user模型本身还没有id,因为它没有保存到数据库中。

那么如何保存user模型,然后在user_id模型中填充pet并保存,一气呵成?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用嵌套属性,在accepts_nested_attributes_for模型中定义user

class User < ActiveRecord::Base
  has_many :pets

  accepts_nested_attributes_for :pets

现在你需要为宠物设置嵌套参数,这样你的参数应该是

user_params = {:name => "Foo Bar", :age => 27, :pets_attributes => [{ type: "dog", breed: "Golden Retreiver" }]}

现在将此参数传递给您的模型

user = User.new(user_params)
user.save!
相关问题