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_id
和status_id
列以及你的bug和状态表。