has_many:通过关系是建模这些数据的正确方法吗?

时间:2013-01-04 05:28:05

标签: ruby-on-rails-3 data-modeling

我有一个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个人资料?这对我来说听起来不对。我上面概述的丰富协会有什么好处吗?

1 个答案:

答案 0 :(得分:0)

我认为似乎很好地坚持使用has_many:through。因为我们不需要在客户端和其他表之间建立额外的关系,即地址等,并且还需要在这些表中添加额外的列client_id。只有推送个人资料ID才会这样做。