0

如果您有以下型号:

client has_many :projects
project has_many :tasks
tasks has_many :timeentries

timeentries belongs_to :task
task belongs_to :project
project belongs_to :client

那么您是否需要模型语句,例如:

timeentries belongs_to project :through => :tasks
client has_many :tasks, :through => :projects

谢谢

4

1 回答 1

0

简单的答案是您不必这样做,但您可能想要这样做。这在一定程度上取决于您将如何使用您的模型——如果您希望能够从另一端访问关系的每一端,那么您可能需要它。因此,如果您希望能够直接从那里访问 Project,TimeEntries.Project那么您可能想要它,如果您愿意通过,TimeEntries.Task.Project那么您不需要显式关系,这会使事情进一步复杂化。

请注意 Has_and_belongs_to_many :through 这适用于您有多对多关系的情况,使用中介表纯粹表示关系,因此中介不需要它自己的模型。

这在双向多对多关系中很常见——假设你有某种标签云,你可能会有这样的东西:

  Article               ArticleTag       Tag
    Id                    ArticleId        Id         
    Title                 TagId            Text
    Text

一篇文章可以有多个标签,一个标签可以应用于多个文章,所以你不想在表格中绑定任何一个。所以文章通过 ArticleTag 有_many 标签。

这给出了Rails 中关联的方便总结。

于 2012-05-18T16:10:07.393 回答