我的情况是这样的。 公司拥有众多用户,用户可能属于很多公司。 目前的实施情况如下所示。
class Company
has_many :employments
has_many :users, :through => :employments
end
class Employment
belongs_to :company
belongs_to :user
end
class User
has_many :employments
has_many :companies, :through => :employments #This doesn't looks correct
end
它有效,但“用户有很多公司”看起来没有逻辑意义。它必须是像belongs_to_many公司那样的东西。 我需要使用has_and_belongs_to_many吗?
有人可以建议表达这些关系的正确方法吗?
答案 0 :(得分:0)
如果您不打算向Employment
类添加一些特殊行为,而您实际上并不需要它,那么您应该更好地使用has_and_belongs_to_many
。这样它仍然会有一些名为CompanyUser
的表,但代码中不会有这样的类。
<强>加了:强>
2个对象之间只有3个可能的连接:1对1,1对多对和多对多。 Rails指示has_*
或belongs_to
两个对象中的哪一个将获得外键。所以:
1至1:
使用has_one和belongs_to。 belongs_to的对象获取FK。
1对多的:
使用has_many和belongs_to。 belongs_to的对象获取FK。
许多一对多:
has_many [through]或has_and_belongs_to_many用于两个对象。没有人获得FK,而是使用ConnectionTable。
因此没有belongs_to_many这样的东西,因为它与has_many相同 - 提供1对多的相同关系。