我正在研究一个使用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
cb中调用after_save
,它将成功保存所有变体(至少向我表明数据本身或验证没有问题)。
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
正常)。