0

我的情况是这样的。公司有很多用户,用户可能属于很多公司。当前的实现如下所示。


  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 吗?

有人可以建议代表这些关系的正确方法吗?

4

1 回答 1

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。

  • 一对多:

    使用 has_many 和 belongs_to。带有belongs_to 的对象获得FK。

  • 多对多:

    has_many[through] 或 has_and_belongs_to_many 用于两个对象。没有人获得 FK,而是使用 ConnectionTable。

所以不存在belongs_to_many 这样的东西,因为它与has_many 相同——提供相同的一对多关系。

于 2010-04-24T09:20:24.637 回答