如果您有以下型号:
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
由于
答案 0 :(得分:0)
简单的答案是你不必,但你可能想要。这取决于您将如何使用您的模型 - 如果您希望能够从另一端访问关系的每一端,那么您可能需要它。因此,如果您希望能够直接从TimeEntries.Project
访问项目,那么您可能需要它,如果您愿意通过TimeEntries.Task.Project
,那么您不需要明确的关系,这会使问题进一步复杂化上。
请注意Has_and_belongs_to_many:通过这种情况,您可以使用中间表纯粹表示关系,从而获得多对多关系,因此中介不需要它自己的模型。
这在双向多对多关系中很常见 - 假设你有某种类型的标签云,你可能会有这样的东西:
Article ArticleTag Tag
Id ArticleId Id
Title TagId Text
Text
有一篇文章可以有很多标签,一个标签可以应用于很多文章,所以你不想在表格中绑定。所以文章有很多标签通过ArticleTag。
Rails中