2012-07-18 44 views
0

我正在構建一個簡單的ToDo應用程序,其中我有項目,誰有許多任務,誰有許多子任務。用戶可以分配給項目,任務和子任務。範圍從數組只有那些對象在其中一個用戶是當前用戶

在我的應用程序的一部分(在項目展示頁面),我希望顯示任務&過期的子任務。我用下面的代碼挑選它們:

35  @project_tasks = @project.tasks 
36  @project_subtasks = @project.subtasks 
37 
38  # OVERDUE 
39  @overdue_tasks = @project_tasks.overdue 
40  @overdue_subtasks = @project_subtasks.overdue 
41  @overdue_tasks_and_subtasks = @overdue_tasks + @overdue_subtasks 
42  @overdue_tasks_and_subtasks_sorted = @overdue_tasks_and_subtasks.sort_by {|object| object.target } 

這顯示了某些項目上所有用戶的過期任務和子任務。但是,我希望在用戶點擊按鈕時有選項,他只看到他分配給的任務和子任務。因此,下列範圍將適用於第43行:

@overdue_tasks_and_subtasks_from_current_user_sorted = @overdue_tasks_and_subtasks_sorted.where(#one of the users is the current_user) 

如何編寫該範圍?

回答

1

由於@overdue_tasks_and_subtasks_sorted是一個數組,我想你可以使用陣列#選擇:

@overdue_tasks_and_subtasks_from_current_user_sorted = @overdue_tasks_and_subtasks_sorted.select do |task| 
task.users.include?(current_user) 
end 

的選擇標準的確切性質自然取決於如何你相關任務/子任務與用戶,以及如何你正在跟蹤當前用戶。

我的直覺是你可以通過一些聰明的數據庫查詢來提高效率,但究竟是如何工作取決於數據因素 - 你正在使用哪個數據庫,不管你是否使用Rails 3,你的模型是什麼,以及如何互動等。

+0

如果我能我給你1000分:)謝謝你,工作就像一個魅力。我正在使用MySQL和rails 3.你能幫助我用這些信息進行更有效的查詢嗎? – oFca 2012-07-18 22:08:23

+1

@oFca研究Rails 3的ActiveRelation是如何工作的。通常,使用'.joins'和'.where'進行數據庫中的過濾會更快,而不是實際上將這些對象加載到內存中並使用'.select'。另外,通過智能使用急切加載(通過'.includes'方法),您通常可以獲得很多性能。本指南可能是一個很好的開始:http://guides.rubyonrails.org/active_record_querying.html – MrTheWalrus 2012-07-18 22:36:56

+0

是的,閱讀指南之前,但無法弄清楚...如果你有時間,我會非常非常感謝,如果你在代碼中寫下你的想法,這將對我有很大的幫助。 – oFca 2012-07-18 22:45:47

相關問題