Как сохранить вложенные объекты в рельсах 3? - PullRequest
3 голосов
/ 23 июня 2011

Я пытался найти решение следующей проблемы.У меня есть три типа объектов: A, B och C. C содержит B, а B содержит A. Что я хочу сделать, это:

A.new (: b => B.new (: c =>C.new)). Save

но это терпит неудачу, и я вынужден сделать это наоборот.Любые идеи о том, как я могу написать это?Текущий код выглядит так:

  B.transaction do |t|
    b = B.create(:object => @object)
    C.create(:b => b)
  end

1 Ответ

1 голос
/ 24 июня 2011

Лучший способ сделать это - использовать 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])

См. Примеры здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...