Rails:belongs_to vs has_one

有关轨道协会的一个新手问题。

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

内容belongs_to ContentTemplate。 回过头来看看我如何描述这个问题,你会看到它的工作原理。 通过belongs_to,表格接受外键的责任。 所以Content有一个content_template_id。 而ContentTemplate不需要任何东西。 我可以随意指出。 完成。

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

是的,我认为你刚刚在Rails中发现了一个有点奇怪的场景。 我认为将“状态”视为bug所属类别可能是有用的 – 就此而言,这是有道理的。

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 

你没有明确解释你想获得什么样的Bug和状态之间的关系,但是我认为你对下面的一个感兴趣:

  • 一对多:在这种情况下,应该有Bug类中的has_many和Status类中的belongs_to
  • 一对一:在这种情况下,Bug类应该有has_one ,而Status类应该有belongs_to

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

如果Status只是一个查找/键值表,这听起来像你可能想要状态和Bug之间的habtm ( has_and_belongs_to_many )关系。 用habtm,你最终会得到一个bugs_statuses连接表,它有bug_idstatus_id列以及你的bug和状态表。