如何在rails 3中保存嵌套对象?

时间:2011-06-23 19:11:42

标签: ruby database ruby-on-rails-3 activerecord

我一直在努力寻找以下问题的解决方案。我有三种类型的对象: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

1 个答案:

答案 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