提交表单时,操作基于多层嵌套属性创建记录。但是,根记录的ID(我称之为.save
)不会向下传播到关联。
下面是一个简单的例子:
class A
has_many :bs
# Note that A has direct access to C, without going through B
has_many :cs
accepts_nested_attributes_for :b
end
class B
# B has an :a_id field
belongs_to :a
has_many :cs
accepts_nested_attributes_for :c
end
class C
# note that C has a "circular relationship" to A,
# either directly through the :a_id field, or indirectly through B
belongs_to :a
belongs_to :b
end
给定上面的模型定义,这是一个示例有效负载:
{
a: {
name: "Model A",
bs_attributes: [{
name: "Model B",
cs_attributes: [{
name: "Model C"
}]
}]
}
}
这个有效载荷将被送入:
A.create(payload)
当它在数据库中持久化并且A被分配了一个ID时,我希望这个ID在子记录(B)和孙记录(C)上都被自动设置为外键。这是不是可以通过使用Rails内置函数来完成的?
我能想到的解决方案的一个例子是在关联上添加一个before_保存回调来手动设置:a_id
字段。然而,这似乎可以用更简单的方法来实现。
目前在Rails 5上工作,但任何指导都很感激。
1条答案
按热度按时间rkkpypqq1#
使用
inverse_of
链接关联应该可以用于嵌套属性。例如,A到B:C到B也是一样。
A到C有点特殊。在C上的
before_validation
回调中设置c.a = b.a
是一个选项。