HABTM или несколько belongs_to?

Я преподаю мне направляющие, и как тестовый проект, я копирую простое приложение вопроса/ответа, подобное stackoverflow.

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

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

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

Действительно ли HABTM является ответом между этими тремя классами?

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

7
задан jefflunt 13 January 2010 в 05:52
поделиться

2 ответа

Это может быть «известным» ограничением jQuery; Однако, похоже, это не должно быть хорошо документировано. Я провел около 4 часов сегодня, пытаясь понять, почему мой тайм-аут не работал.

Я перешел на jQuery.jsonp , и он работал понравилось очарование. Спасибо.

-121--776953-

это 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, иностранные отношения ключей), в то время как тег Ruby-on-rails в настоящее время имеет 8 546 вопросов.

7
ответ дан 7 December 2019 в 07:45
поделиться

принадлежит - это странное имя. Выясните ваши отношения HAS_MANY и просто поставить принадлежать к другой стороне и не беспокойтесь о семантике этого.

0
ответ дан 7 December 2019 в 07:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: