我有一个Client
模型,需要每个客户端实例拥有并创建多个地址,email_ids,phone_numbers。一个简单的has_many
关系不允许我扩展我的假设所以我认为我应该寻求has_many :through
关系
我想使用has_many:through relationship
class Client < ActiveRecord::Base
has_one :profile
has_many :addresses, :through => :profile
has_many :emails, :through => :profile
has_many :phonenumbers, :through => :profile
end
class Profile < ActiveRecord::Base
belongs_to :client
has_many :addresses
has_many :emailids
has_many :phonenumbers
end
class Address < ActiveRecord::Base
belongs_to :profile
end
class EmailId < ActiveRecord::Base
belongs_to :profile
end
class PhoneNumber < ActiveRecord::Base
belongs_to :profile
end
然后我是否能够执行以下查询:
client.phonenumbers
client.create_phonenumbers
等?
或者我应该坚持使用has_many belongs_to并将地址,email_id和phone_number放在个人资料关系中,然后说出客户has_many
个人资料?这对我来说听起来不对。我上面概述的丰富协会有什么好处吗?
答案 0 :(得分:0)
我认为似乎很好地坚持使用has_many:through。因为我们不需要在客户端和其他表之间建立额外的关系,即地址等,并且还需要在这些表中添加额外的列client_id。只有推送个人资料ID才会这样做。