Вопрос

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

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

  • вопросы
  • ответы
  • пользователи (авторы вопросов и ответов)
Я понимаю, что ответы относятся к вопросам.

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

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

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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 в настоящее время содержит 8546 вопросов.

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top