我一直在努力寻找以下问题的解决方案。我有三种类型的对象:A,B och C. C包含B而B包含A.我想做的是:
A.new(:b => B.new(:c => C.new))。保存
但是这很糟糕,我不得不反过来这样做。关于如何写它的任何想法?当前代码如下所示: B.transaction do |t|
b = B.create(:object => @object)
C.create(:b => b)
end
答案 0 :(得分:1)
执行此操作的最佳方法是使用accepts_nested_attributes_for
。
你应该放入模特A:
accepts_nested_attributes_for :b_model
模型B中的:
accepts_nested_attributes_for :c_model
然后输入:
params = { :a_model => {
:name => 'i belong to a',
:b_attributes => {
:title => 'I belong to b'
:c_attributes => {
:city => "I belong to c"
}
}
}
}
a = AModel.create(params[:a_model])
参见示例here。