使用一个请求返回两个嵌套在一起的表

时间:2015-08-17 15:59:28

标签: sql ruby-on-rails

我有一个项目管理应用程序,包含项目,任务和作业。

Project
has_many :tasks

Task
belongs_to :project
has_many :assignments

Assignment
belongs_to :task
belongs_to :user

我希望能够通过一个请求获取项目的所有任务和作业。

目前我必须请求每个任务的分配,如果用户只有几个任务,这可能效率很低。

2 个答案:

答案 0 :(得分:2)

如果你做这样的事情,Rails会找出最好的查询来运行

# Assuming params[:id] is the project id.
@project = Project.includes(:tasks => :assignments).find(params[:id])

因此,当您要求@project.tasks并使用task.assignments循环完成每个任务时,已经加载了关联。

答案 1 :(得分:1)

通过添加到Project模型中,如下所示:

has_many :tasks
has_many :assignments, through: :tasks

现在,您可以调用@project.assignments来获取该项目的所有分配,或者@project.assignments.uniq来列出唯一分配(不重复),如果分配在两个以下任务扩展您的关联以包含该功能。