2012-01-29 76 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