Inheritance and polymorphic-associations in rails

2019-02-03 20:58发布

问题:

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:

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.