Ruby on rails Rails:属于vs,有一个

Ruby on rails Rails:属于vs,有一个,ruby-on-rails,model,associations,has-many,belongs-to,Ruby On Rails,Model,Associations,Has Many,Belongs To,一个关于rails关联的新手问题 我有一个Bug模型和一个状态模型。状态基本上只是一个键/值对表。在可用的选择中,我想说Bug有一个状态是最有意义的。但是根据 内容属于ContentTemplate。去 回头看看我是如何描述 问题,你会发现它是有效的。 对于所属对象,表接受 负责外键。所以 内容具有内容模板id。并且 ContentTemplate不需要任何东西。 我可以随意指出。完成了 Bug属于状态更合适(因为Bug应该使用外键)。从语义上讲,他的例子有道理,但我的例子没有道理。这只是rai

一个关于rails关联的新手问题

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

内容属于ContentTemplate。去 回头看看我是如何描述 问题,你会发现它是有效的。 对于所属对象,表接受 负责外键。所以 内容具有内容模板id。并且 ContentTemplate不需要任何东西。 我可以随意指出。完成了


Bug属于状态更合适(因为Bug应该使用外键)。从语义上讲,他的例子有道理,但我的例子没有道理。这只是rails的一个怪癖,在这种情况下,它看起来很奇怪,还是我没有理解某些事情/做错了?

如果状态只是一个查找/键值表,那么听起来您可能希望状态和Bug之间有一个(
has_和_beling_to_many
)关系。使用habtm,您将得到一个
bugs\u statuses
连接表,该表包含
bug\u id
status\u id
列以及您的bugs和statuses表。

是的,我认为您刚刚在Rails中发现了一个看起来有点奇怪的场景。我认为将“状态”视为bug所属的一种类别可能很有用——从这个角度看,这是有意义的。

您没有准确解释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类中应该有
    has\u many
    ,而Status类中应该有
    属于
  • 一对一:在这种情况下,Bug类中应该有
    has\u one
    ,而Status类中应该有
    归属于

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

这是多对多关系,但事实并非如此。这是一个多对一的问题。我的问题基本上是,这种关系的措辞只有在一对多,而不是多对一的情况下才有意义,如果有更优雅的方式来处理它的话。明白。我想我对“Bug”及其“状态”的典型想法是,一个Bug可能同时处于多种状态(例如“WorkForme”和“open”),或者您可能希望保留Bug状态的历史记录。Bug会使用外键,因为一个状态可能有许多Bug,但是一个bug一次只有一个状态。你的新解决方案是我们如何看待这种情况的,但它不会起作用。当您执行bug.status时,它将在status中查找不存在的bug_id列。A has_one或has_many需要与正在“had”的类中所属的A相匹配。您将如何更改它?请随意将我的答案复制到您的答案中,如果您愿意,可以在那里进行更改。我只是想知道你认为这些模型应该是什么样子。它应该是Bug.allows\u to:status,就像提问者猜测的那样。这看起来很尴尬,但Rails需要用这种方式来表达这种关系。“属于”意味着“我的表有外键”。这样,bug.status和status.bug都能正常工作。问题是一个bug一次没有很多状态,无论是在概念上还是在正确的实现中。从概念上讲,我们认为状态属于许多bug,但Rails只能将其表示为具有许多bug的状态。@chuck:差不多就是这样。一对多vs多对一。从逻辑上讲,基本上是相同的,但从概念上讲,有一点不同,我想这是rails在语义上工作得多么好的一个证明,在这种情况下,我会说“我一定是做错了”