我正在自学Rails,并且作为测试项目,我在模拟一个类似于stackoverflow的简单问题/答案应用程序。
在简化版本中,我有:
在我看来,问题和答案并不是真正的“属于”用户,而是问题和答案“有一个用户”(作者)。但这似乎也不对,因为那样的话,用户将“belong_to问题”和“belong_to回答”。
HABTM是这三个类(class)之间的答案吗?
很多人陷入这种关系的事情,不是吗? :)
最佳答案
不需要。在任何这些关系中都不需要HABTM。
在这两种情况下,这都是一对多的关系:用户有很多问题,而用户有很多答案。
从逻辑角度来看,请考虑以下问题:一个问题永远不能由多个用户创作,一个答案不能由多个用户创作。 这样,这不是多对多的关系。
在这种情况下,您的类(class)应该像这样设置:
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关系。一个问题可以有很多标签,而一个标签可以有很多问题。举一个主要的例子,您的帖子有3个标签(ruby-on-rails,habtm,foreign-key-relationship),而ruby-on-rails标签目前有8,546个问题。
关于ruby-on-rails - HABTM,还是多个belongs_to?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2054729/