Полиморфная ассоциация foreign_type устанавливает тип предка вместо текущего, используя класс STI - PullRequest
1 голос
/ 18 августа 2011

У меня есть

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 ]

3 голосов
/ 18 августа 2011

Это потому, что Porshe - это виртуальная модель, в действительности ее нет в базе данных, а просто есть поле type, чтобы знать, что это Porshe.Возможно, вам следует избавиться от ИППП и использовать, скажем, type столбец, чтобы сохранить модель автомобиля с типом Porshe, и использовать scope, чтобы найти porshes .Я надеюсь, что помог вам немного.

0 голосов
/ 18 августа 2011

Я думаю, что если вы добавите поле type в таблицу Car, вы сможете получить тип Porsche, используя: PageItem.new(:itemable => Porsche.new).itemable.type

...