多态关联foreign_type使用STI类设置祖先类型而不是current

时间:2011-08-18 14:25:54

标签: ruby-on-rails ruby activerecord polymorphic-associations single-table-inheritance

我有

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

2 个答案:

答案 0 :(得分:3)

这是因为Porshe是虚拟模型,它并不存在于数据库中,它只有type字段才能知道它是Porshe。也许您应该摆脱STI并使用说type列来保存带有Porshe类型的Car模型,并使用scope来查找 porshes 。我希望我能帮助你。

答案 1 :(得分:0)

我认为如果您将type字段添加到Car表格,您将能够使用以下内容获取Porsche类型:   PageItem.new(:itemable => Porsche.new).itemable.type