HABTM,还是多个belongs_to?

jef*_*unt 7 ruby-on-rails foreign-key-relationship has-and-belongs-to-many

我正在自学Rails,作为一个测试项目,我正在嘲笑一个类似于stackoverflow的简单问题/答案应用程序.

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

  • 问题
  • 答案
  • 用户(问答的作者)
我得到答案属于问题.

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

在我看来,问题和答案并不真正"归于"用户,而是问题和答案"has_one user"(作者).但这似乎也不正确,因为那时用户将"属于问题"和"属于回答".

HABTM是三个班级之间的答案吗?

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

von*_*rad 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
Run Code Online (Sandbox Code Playgroud)

另一方面,如果您有一个类似于StackOverflow的标记系统,则需要HABTM关系.一个问题可以有很多标签,而一个标签可以有很多问题.作为一个主要的例子,你的帖子有三个标签(ruby-on-rails,habtm,foreign-key-relationship),而ruby-on-rails标签目前有8,546个问题.