我有
class Car < ActiveRecord::Base; end
class Porsche < Car
has_many :page_items, :as=>:itemable, :dependent=>:destroy
end
我必须提到我正在使用名为cars
的单个表,其中包含一个字段type
。
class PageItem<ActiveRecord::Base
belongs_to :itemable, :polymorphic=>true
end
当我这样做时
a = PageItem.new
a.itemable = Porsche.new
a.itemable
#<Porsche id: nil, type: "Porsche", name: nil, ..etc>
a.itemable_type
=> "Car"
它应该是
a.itemable_type
=> "Porsche"
有人对此有所了解吗?
更新
根据bor1s
的答案,这可能是正确的行为。所以,如果是,那么我的问题是如何隐式地将它设置为Porsche
?
答案 0 :(得分:3)
这是因为Porshe是虚拟模型,它并不存在于数据库中,它只有type
字段才能知道它是Porshe。也许您应该摆脱STI并使用说type
列来保存带有Porshe类型的Car模型,并使用scope
来查找 porshes 。我希望我能帮助你。
答案 1 :(得分:0)
我认为如果您将type
字段添加到Car
表格,您将能够使用以下内容获取Porsche
类型:
PageItem.new(:itemable => Porsche.new).itemable.type