7

我正在自学 Rails,作为一个测试项目,我正在模拟一个类似于 stackoverflow 的简单问答应用程序。

在我的简化版本中,我有:

  • 问题
  • 答案
  • 用户(问题和答案的作者)
我知道答案属于问题。

  • 用户和问题之间的正确关系是什么?
  • 用户和答案之间的正确关系是什么?

在我看来,问题和答案并不是真正“属于”用户,而是问题和答案“有一个用户”(作者)。但这似乎也不对,因为这样用户就会“belong_to question”和“belong_to answer”。

HABTM 是三个类别之间的答案吗?

很多人都被这种关系所困扰,不是吗?:)

4

2 回答 2

7

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 标签目前有 8,546 个问题。

于 2010-01-13T06:34:30.263 回答
0

Belongs_to 是一个奇怪的名字。找出你的 has_many 关系,然后把 belongs_to 放在另一边,不用担心它的语义。

于 2010-01-13T05:55:25.480 回答