1

私は単純な 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 )

そのスコープをどのように書くのですか?

4

1 に答える 1

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を使用しているかどうかに関係なく、使用しているデータベース、モデルが何であるかなど、さまざまな要因によって異なります。相互作用の仕方など。

于 2012-07-18T21:53:27.187 に答える