我有
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
? 最佳答案
这是因为POSHER是虚拟模型,它并不存在于数据库中,只是有了type
字段才知道它是PORHER。也许你应该去掉STI,使用saytype
列来保存Porshe类型的汽车模型,并使用scope
来查找porses我希望我帮了你一把。