我正在自学Rails,作为一个测试项目,我正在嘲笑一个类似于stackoverflow的简单问题/答案应用程序。
在我的简化版中,我有:
在我看来,问题和答案并不真正“属于”用户,而是问题和答案“has_one user”(作者)。但这似乎也不正确,因为那时用户将“属于问题”和“属于回答”。
HABTM是三个班级之间的答案吗?
很多人都被这种关系困住了,不是吗? :)
答案 0 :(得分: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个问题。
答案 1 :(得分:0)
Belongs_to是一个奇怪的名字。找出你的has_many关系,只需将belongs_to放在另一边,不要担心它的语义。