2011-12-15 6 views
-1

Я застрял на попытке исправить проблему. У меня есть обновление модели с двумя уровнями глубины вложенных полей.Вложенные атрибуты не сохраняются при обновлении объекта

У меня есть довольно простая модель

class Flight < Plan 
    attr_accessible :travels_attributes 
    has_many :travels, :class_name => "FlightTravel", :foreign_key => "plan_id", :dependent => :destroy 
    accepts_nested_attributes_for :travels, :allow_destroy => true 
End 

class FlightTravel < ActiveRecord::Base 
    attr_accessible :segments_attributes 

    has_many :segments, :class_name => "FlightSegment", :dependent => :destroy, :foreign_key => "flight_travel_id" 
    accepts_nested_attributes_for :segments, :allow_destroy => true 
end 

class FlightSegment < ActiveRecord::Base 

end 

Теперь, когда я пытаюсь вызвать flight.update_attributes (: travels_attributes => {...}) в консоли будет правильно обновить объект с нужными значениями.

Я вызываю flight.save, и он ничего не делает, и по какой-то причине просто пропускает обновление вложенных ассоциаций. Что я делаю не так ?

+0

Есть ли какие-либо проверки, которые могут быть неудачными? Это также поможет увидеть фактические вызовы, которые терпят неудачу, возможно, с упрощенными данными. Ваш вызов update_attributes в консоли должен быть сохранен в базе данных. Я предполагаю, что использование: travel_attributes [sic] в качестве ключа является опечаткой. – austinfromboston

+0

Да, извините, должно быть, travels_attributes. Обновился. Na не проверяется, потому что он даже не попадает на обратный вызов before_validation в классе FlightSegment –

+0

Можете ли вы сделать это в консоли rails, а затем посмотреть, не потерял ли flight.errors после #save? –

ответ

0

Хорошо, я выяснил, какую проблему у меня возникла.

У меня были классы действительно выкладывается как этот

class Flight < Plan 
    attr_accessible :travels_attributes 
    has_many :travels, :class_name => "FlightTravel", :foreign_key => "plan_id", :dependent => :destroy 
    accepts_nested_attributes_for :travels, :allow_destroy => true 
End 

class Travel < ActiveRecord::Base 
    attr_accessible :segments_attributes 
    has_many :segments, :class_name => "TravelSegment", :dependent => :destroy, :foreign_key => "flight_travel_id" 
    accepts_nested_attributes_for :segments, :allow_destroy => true 
end 

class FlightTravel < Travel 
    attr_accessible :segments_attributes 

    has_many :segments, :class_name => "FlightSegment", :dependent => :destroy, :foreign_key => "flight_travel_id" 
    accepts_nested_attributes_for :segments, :allow_destroy => true 
end 

class FlightSegment < ActiveRecord::Base 

end 

Я ожидал, что сегменты FlightTravel переопределить сегменты путешествия, но по какой-то причине он не делает. Он работает для создания записей, но не при обновлении.

Смежные вопросы