我正在构建一个简单的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 )
如何编写该范围?
答案 0 :(得分:1)
由于@overdue_tasks_and_subtasks_sorted
是一个数组,我想你可以使用Array#select:
@overdue_tasks_and_subtasks_from_current_user_sorted = @overdue_tasks_and_subtasks_sorted.select do |task|
task.users.include?(current_user)
end
选择标准的确切性质自然取决于您与用户关联的任务/子任务的方式,以及您如何跟踪当前用户。
我的直觉是你可以通过一些聪明的数据库查询提高效率,但具体如何工作取决于一些因素 - 你正在使用哪个数据库,无论你是否使用Rails 3,你的模型是以及如何互动等。