【发布时间】:2015-04-10 02:55:59
【问题描述】:
注意:虽然该项目使用 Spree 版本 2.3,但我目前不认为这是一个特定于 Spree 的问题。虽然如果我错了请纠正我。
Spree 框架有一个名为 Calculator 的模型,如下所示:
module Spree
class Calculator < Spree::Base
belongs_to :calculable, polymorphic: true
...
end
end
我从这个类继承来创建我自己的计算器,它看起来很简单(与任何其他 Spree Calculator subclass 略有不同):
module Spree
class Calculator
class PercentDiscountOnVariant < Calculator
preference :percent, :decimal, default: 0
...
end
end
end
我的模型,称为ClientProduct 与Calculator 有has_one 关系,并且可以接受它的嵌套属性,就像这样:
module Spree
class ClientProduct < ActiveRecord::Base
has_one :calculator, inverse_of: :calculable, foreign_key: "calculable_id", dependent: :destroy
accepts_nested_attributes_for :calculator
...
end
end
问题是,当我创建 ClientProduct(新记录或更新现有记录)时,calculators 表中的 calculable_type 列仍然为空。 但是,calculable_id 正确填充了 ClientProduct 的 ID。
参数映射的相关部分是:
"client_product"=>{
"variant_id"=>"300",
"client_id"=>"2",
"role_ids"=>["7"]
"calculator_attributes"=> {
"type"=>"Spree::Calculator::PercentDiscountOnVariant",
"preferred_percent"=>"15"
}
}
而ClientProduct 是用Spree::ClientProduct.create(client_product_params) 创建的。
什么会导致正确设置多态 ID,同时让多态类型列为空?
次要旁注:为了简单起见,关于ClientProduct 的构建方式,我有点撒谎。使用组合 variant_ids 和 client_ids 批量插入多个 ClientProduct 行。但是,calculator_attributes 对于创建的每个ClientProduct 都是相同的,所以我不相信这个特定的设置会改变任何东西。但是,如果有人觉得这可能是相关的,请告诉我,我会提供实际(虽然更长)的代码。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 spree polymorphic-associations