Rails:belongs_to vs has_one

时间:2009-05-22 21:00:54

标签: ruby-on-rails model associations has-many belongs-to

关于rails association的一些新手问题。

我有一个Bug模型和一个状态模型。状态基本上只是一个键/值对表。在可用的选择中,我会说Bug has_one Status最有意义。但是,根据this

  

内容belongs_to ContentTemplate。走   回头看看我怎么描述的   问题,你会发现它有效。   使用belongs_to,表接受   对外键负责。所以   内容有一个content_template_id。和   ContentTemplate不需要任何东西。   我可以随意指出它。完成。

Bug belongs_to状态更合适(因为Bug应该使用外键)。在语义上,他的榜样是有道理的,但是我没有。这只是一个轨道的怪癖,在这种情况下它看起来很奇怪,或者我不理解某事/做错了?

4 个答案:

答案 0 :(得分:19)

是的,我认为你刚刚在Rails中发现了一个略显奇怪的场景。我认为将“状态”视为bug所属的类别可能是有用的 - 在这种情况下,它是有道理的。

答案 1 :(得分:9)

TABLE:
    Bug
    id integer
    desc string
    status_id integer fk

    Status
    id integer
    desc string

RAILS MODEL:
    Bug
    belongs_to :status

    Status
    has_many :bugs

答案 2 :(得分:2)

您没有准确解释您希望获得的Bug和Status之间的关系,但我认为您对以下某项感兴趣:

  • 一对多:在这种情况下,Bug类中应为has_many,Status类中应为belongs_to
  • 一对一:在这种情况下,Bug类中应为has_one,Status类中应为belongs_to

在这两种情况下,Status都包含外键。在第二种情况下,措辞有点奇怪,因为一对一关系实际上是不对称的(一方应该只有一个FK)。

答案 3 :(得分:0)

如果状态只是一个查找/键值表,听起来您可能希望Status和Bug之间存在habtmhas_and_belongs_to_many)关系。有了habtm,您最终会得到一个bugs_statuses联接表,其中包含bug_idstatus_id列以及您的错误和状态表。