Вы можете хранить разные таблицы для investor_profiles
и advisor_profiles
с отдельными моделями InvestorProfile, AdvisorProfile
(которые могут наследоваться от базового класса Profile
, при условии, что они имеют хотя бы незначительное перекрытие).
Но в ваших модельных связях используйте опцию :class_name
, чтобы скрыть _profiles
:
class Investor < ActiveRecord::Base
has_one :profile, :class_name => "InvestorProfile"
end
class Advisor < ActiveRecord::Base
has_one :profile, :class_name => "AdvisorProfile"
end
# And since the profiles probably overlap in some way
# a profile base class which the other 2 profile classes extend
class Profile < ActiveRecord::Base
# base options like name, address, etc...
end
class InvestorProfile < Profile
# Investor-specific stuff
end
class AdvisorProfile < Profile
# Advisor-specific stuff
end
На практике вы можете ссылаться на него как self.profile
:
# Use it as
adv = Advisor.new
puts adv.profile.inspect
См. ActiveRecord::Associations
документацию для описания опций.