2010-04-24 2 views
0

Моя ситуация такая. В компании много пользователей, и пользователи могут быть представлены многими компаниями. И текущая реализация - это что-то вроде ниже.has_many отношение не кажется правильным или логичным в бизнесе perceptive, нужна какая-то вещь, как own_to_many?


    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 

Он работает, но "пользователь имеет много компаний" не выглядит логически значимым. Это должно быть что-то вроде компаний, принадлежащих к_машине. Нужно ли использовать has_and_belongs_to_many?

Может кто-нибудь предложить правильный способ представления этих отношений?

ответ

0

Если вы не собираетесь добавлять какое-либо особое поведение в класс Employment, и вам это действительно не нужно, тогда вам лучше использовать has_and_belongs_to_many. Таким образом, у него все еще будет таблица с именем CompanyUser, но такого кода в коде не будет.

Добавлено: Есть только 3 possbile conections между 2 объектами: 1-к-1, 1-к-многим и многие-ко-многим. Rails указывает с has_* или belongs_to, что из двух объектов получит внешний ключ. Итак:

  • 1-к-1: используются

    has_one и belongs_to. Объект с именем принадлежит_К получает FK.

  • 1-к-многим:

    has_many и belongs_to используются. Объект с именем принадлежит_К получает FK.

  • многие-ко-многим:

    has_many [через] или has_and_belongs_to_many используются в обоих объектах. Никто не получает FK, вместо этого используется ConnectionTable.

Так что нет такого понятия, как belongs_to_many, потому что это будет такой же, как has_many - обеспечение такое же отношение 1-к-многим.

+0

Я чувствую, has_and_belongs_to_many также дает то же значение. «Пользователь имеет и принадлежит многим компаниям». Другой подобный тип отношений, вероятно, лучше всего объясняет мои сомнения. Строка имеет много символов и символов, принадлежащих ко многим строкам. Если мы пишем Символ, он принадлежит и принадлежит ко многим строкам, часть которых выглядит неправильно. Наверное, я не должен принимать буквальный смысл. – Vijendra

+0

Я добавил дополнительную информацию к ответу. –