views:

193

answers:

1

I have a User model, which belongs to Profile (belongs_to polymorphic). One model comes in two subclasses, but the *profile_type* in User always correspond to the parent model.

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

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

SomeDeepProf1 < SomeProf

SomeDeepProf2 < SomeProf

Then:

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

Even stating the association in subclasses, the profile_type remains SomeProf.

Why does this happen? Is there any way profile_type match subclass and not the parent class?

+1  A: 

This happens because the _type column is supposed to identify the model's table and should not contain data on the model itself - just a reference.

However if you inspect user.profile.type it should return SomeDeepProf1.

Marcel J.
Yes Marcel, I noticed it. My code is using profile_type to decide the type of User and avoid extra access to the database. Thanks for the explanation!
nanda