你需要通过belongs_to吗?

时间:2012-05-18 15:52:13

标签: ruby-on-rails-3

如果您有以下型号:

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

由于

1 个答案:

答案 0 :(得分:0)

简单的答案是你不必,但你可能想要。这取决于您将如何使用您的模型 - 如果您希望能够从另一端访问关系的每一端,那么您可能需要它。因此,如果您希望能够直接从TimeEntries.Project访问项目,那么您可能需要它,如果您愿意通过TimeEntries.Task.Project,那么您不需要明确的关系,这会使问题进一步复杂化上。

请注意Has_and_belongs_to_many:通过这种情况,您可以使用中间表纯粹表示关系,从而获得多对多关系,因此中介不需要它自己的模型。

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

  Article               ArticleTag       Tag
    Id                    ArticleId        Id         
    Title                 TagId            Text
    Text

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

Rails中

This gives a handy summary个关联。