我正在开发一个使用 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)如果我们调用模型cb @product.variants.each {|v| v.save}
,它会成功保存所有变体(至少向我表明数据没有任何问题自己或验证)。2) 关联变体的实例对象没有错误。3)如果我们省略:Store::Product
after_save
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
工作正常)。