我有

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我希望我帮了你一把。

08-26 19:32