HABTM,还是多个belongs_to?

时间:2010-01-13 05:52:14

标签: ruby-on-rails foreign-key-relationship has-and-belongs-to-many

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

在我的简化版中,我有:

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

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

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

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

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

2 个答案:

答案 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放在另一边,不要担心它的语义。