Я работаю над проектом, который использует движок Solidus.Однако мы хотим изменить модели, в частности, создавая новые модели, которые наследуются от моделей двигателя по умолчанию.
Мы решили сделать это, а не полностью перезаписывать модели по умолчанию или делать декоратор, чувствуя, что декоратор был слишком грязным, но переписывание было бы слишком сложно поддерживать для обновлений, и поэтому попытался найти золотую середину,но независимо, это путь, который мы выбрали.
Проблема в том, что в нашей измененной модели, когда она связана с другой измененной моделью, она не сохраняет должным образом связанные данные через контроллеры.
Например: наша модель Store::Product
(наследует от Spree::Product
) имеет ассоциации, установленные следующим образом:
has_many :variants, :class_name => "Store::Products::Variant", :allow_destroy => true
accepts_nested_attributes_for :variants, :allow_destroy => true
Когда мы отправляем variants_attributes
в данных формы, этоданные формы не сохраняются, даже если: 1) если мы вызовем @product.variants.each {|v| v.save}
в Store::Product
модель after_save
cb, он успешно сохранит все варианты (по крайней мере, для меня это означает, что с самими данными все в порядке)или проверки).2) Нет ошибок в объектах экземпляра связанных вариантов.3) Если мы пропустим:
has_many :variants, :class_name => "Store::Products::Variant", :allow_destroy => true
accepts_nested_attributes_for :variants, :allow_destroy => true
(т.е. просто оставим модель Spree::Variant
по умолчанию в качестве has_many
для нашей Store::Product
модели), форма также будет работать нормально.
Все, что происходит, - это то, что данные продукта сохраняются и затем успешно перенаправляются туда, куда мы установили контроллер, как будто ничего не пошло не так.
ОБНОВЛЕНИЕ: Это верно ТОЛЬКО для update
вызовов (create
работает нормально).