我们说我有一个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
并保存,一气呵成?
谢谢!
答案 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!