HABTM или несколько принадлежащих_ - PullRequest
7 голосов
/ 13 января 2010

Я учу себя Rails, и в качестве тестового проекта я создаю простое приложение для вопросов и ответов, похожее на stackoverflow.

В моей упрощенной версии у меня есть:

  • вопросы
  • ответы
  • пользователей (авторов вопросов и ответов) * +1007 * Я понимаю, что ответы принадлежат вопросам.
    • Каковы правильные отношения между пользователями и вопросами?
    • Каковы правильные отношения между пользователями и ответами?

    Мне кажется, что вопросы и ответы на самом деле не "принадлежат пользователям", а вместо этого - вопросы и ответы "has_one user" (автор). Но это тоже не кажется правильным, потому что тогда пользователь будет «принадлежать к вопросу» и «принадлежать к ответу».

    Является ли HABTM ответом между тремя классами?

    Многие люди застревают в этих отношениях, не так ли? :)

Ответы [ 2 ]

7 голосов
/ 13 января 2010

Является ли HABTM ответом между тремя классами?

Нет. Вам не нужен HABTM ни в одном из этих отношений.

* +1007 * Каковы правильные отношения между пользователями и вопросами? Каковы правильные отношения между пользователями и ответами?

В обоих случаях это отношение один ко многим: у пользователя много вопросов, а у пользователя много ответов.

С логической точки зрения учтите следующее: Один вопрос никогда не может быть создан несколькими пользователями, а один ответ не может быть создан несколькими пользователями. Таким образом, это не отношение многих ко многим. .

В этом случае ваши классы должны быть настроены так:

class User < ActiveRecord::Base
  has_many   :questions
  has_many   :answers
end

class Question < ActiveRecord::Base
  belongs_to :user
  has_many   :answers
end

class Answer < ActiveRecord::Base
  belongs_to :user
  belongs_to :question
end

Если у вас есть система тегов, похожая на StackOverflow, вам понадобятся отношения HABTM. Один вопрос может иметь много тегов, в то время как один тег может иметь много вопросов. В качестве основного примера в вашем сообщении есть три тега (ruby-on-rails, habtm, Foreign-Key-Relationship), а тег ruby-on-rails в настоящее время содержит 8 546 вопросов.

0 голосов
/ 13 января 2010

Belongs_to - странное имя. Выясните ваши отношения has_many и просто поместите own_to с другой стороны и не беспокойтесь о его семантике.

...