2012-01-29 87 views
2

我试图显示一个用户在其'显示'页面上的所有任务(包括每个相关项目信息)的列表。选择父母和孩子的记录,并通过使用rails的孩子排序3

User has_many projects 
Project belongs_to user 
Project has_many tasks 
Task belongs_to project 

我想为用户提供所有任务的列表,每个任务都有单独的行,即使它们都与单个项目有关。我需要在行中显示项目名称以及任务名称。

**Tasks for User 1** 
Project 1 | Task 1 
Project 2 | Task 2 
Project 3 | Task 3 
Project 1 | Task 4 
Project 3 | Task 5 
Project 3 | Task 6 
Project 2 | Task 7 

任何人都可以提出如何使用Rails 3?

回答

2

有两种方法。一个使用一个连接:

@tasks = @user.tasks.joins(:projects).order("projects.id") 

为了使这项工作,用户必须拥有许多任务

has_many :tasks, through: :projects 

另一种方法是使用预先加载:

@projects = @user.projects.includes(:tasks) 
+0

我觉得这是什么我在之后。你可以给出一个例子,在视图中输出它 - 即引用来自项目和任务表的列 – user1116573 2012-01-29 21:00:41

+0

对'@ tasks.each {| t | [t.name,t.project.name] .join(“ - ”)}' – 2012-01-29 21:34:10

+0

这就是我所追求的,但我认为你的代码应该是'@tasks.each do | t | {[t.name,t.project.name] .join(“ - ”)}' – user1116573 2012-01-30 19:37:23

0
# controller 
@projects = current_user.projects.joins(:tasks) 

# view 
[email protected] do |project| 
    -project.tasks.each do |task| 
    %p 
     =project.title 
     | 
     =task.title 
+0

这不是我所追求的,因为它循环了项目和任务。我想我说我的问题错了......对不起。我需要循环执行任务并根据需要输出项目信息,以便可以显示项目的任务,然后显示其他项目的任务,并再次显示该项目的任务(不一定在此列表中)。 – user1116573 2012-01-29 21:05:09