开发者

has_many relation doesn't seems right or logical in business perceptive, needed some thing like belongs_to_many?

My situation is like this. Company has many users and users may belongs to many companies. And current implementation is something like below.


  class Company 
    has_many :employments
    has_many :users, :through => :employments
  end

  class Employment 
    belongs_to :company
    belongs_开发者_StackOverflow社区to :user
  end

  class User
    has_many :employments
    has_many :companies, :through => :employments  #This doesn't looks correct
  end

It works, but "user has many companies" doesn't looks logically meaningful. It must be some thing like belongs_to_many companies. Do I need to use has_and_belongs_to_many?

Can some one please suggest the right way for representing these relationships?


If you are not going to add some special behaviour to Employment class and you don't really need it, then you should propably better use has_and_belongs_to_many. This way it will still have some table called CompanyUser, but there will not be any such class in the code.

Added: There are just 3 possbile conections between 2 objects: 1-to-1, 1-to-many and many-to-many. Rails indicates with has_* or belongs_to what of the 2 objects will get a foreign key. So:

  • 1-to-1:

    has_one and belongs_to are used. The object with belongs_to gets the FK.

  • 1-to-many:

    has_many and belongs_to are used. The object with belongs_to gets the FK.

  • many-to-many:

    has_many[through] or has_and_belongs_to_many are used in both objects. No-one gets a FK, instead a ConnectionTable is used.

So there is no such thing as belongs_to_many, because it would be the same as has_many - providing the same relation 1-to-many.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜