Я работаю над проектом, использующим движок 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
работает нормально).
🤔 А знаете ли вы, что...
Один из наиболее известных гемов - Devise, который предоставляет готовое решение для аутентификации и управления пользователями.