1
私はスコープとコントローラーをリファクタリングしようとしていますが、それが良いと感じています。コントローラの観点からは、新しいコードは間違いなく良いですが、私はalltasks
スコープとall_uncompleted_tasks_ordered_by_deadline
インスタンスメソッドはちょっと変わっていると思います。何か案は?ARのクエリのリファクタリング
ユーザ:
has_many :assigned_tasks, class_name: "Task", foreign_key: "assigner_id", dependent: :destroy
has_many :executed_tasks, class_name: "Task", foreign_key: "executor_id", dependent: :destroy
タスク:
belongs_to :assigner, class_name: "User"
belongs_to :executor, class_name: "User"
scope :alltasks, -> (u) { where('executor_id = ? OR assigner_id = ?', u.id, u.id) }
scope :uncompleted, -> { where(completed_at: nil) }
タスクコントローラ
def index
@tasks = Task.alltasks(current_user).uncompleted.includes(:executor, :executor_profile, :assigner, :assigner_profile).order("deadline DESC")
end
新しいコード:
user.rb
のdef all_uncompleted_tasks_ordered_by_deadline
Task.alltasks(self).uncompleted.includes(:executor, :executor_profile, :assigner, :assigner_profile).order("deadline DESC")
end
タスクコントローラ
def index
@tasks = current_user.all_uncompleted_tasks_ordered_by_deadline
end