2010-02-12 3 views
1

У меня есть Пользователь модель, которая принадлежит Профиль (принадлежит_полиморфному). Одна модель поставляется в двух подклассах, но profile_type в Пользователь всегда соответствует родительской модели.Наследование и полиморфные ассоциации в рельсах

User < ActiveRecord::Base 
    belongs_to :profile, :polymorphic => true 

SomeProf < ActiveRecord::Base 
    has_one :user, :as => :profile 

SomeDeepProf1 < SomeProf 

SomeDeepProf2 < SomeProf 

Тогда:

sdp1 = SomeDeepProf1.new 
user = sdp1.create_user 
user.profile_type 
> 'SomeProf' 

Даже о том, объединение в подклассы, то profile_type остается SomeProf.

Почему это происходит? Есть ли какой-либо способ, с помощью которого profile_type соответствует подклассу, а не родительскому классу?

ответ

3

Это происходит потому, что столбец _type должен идентифицировать таблицу модели и не должен содержать данные о самой модели - просто ссылку.

Однако, если вы проверите user.profile.type, он должен вернуть SomeDeepProf1.

+0

Да, Марсель, я это заметил. Мой код использует profile_type, чтобы определить тип пользователя и избежать дополнительного доступа к базе данных. Спасибо за объяснение! – nanda