数组中的范围只是其中一个用户是当前用户的那些对象

时间:2012-07-18 21:14:43

标签: ruby-on-rails

我正在构建一个简单的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 个答案:

答案 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,你的模型是以及如何互动等。