次のリソースブロックがあります
resources :projects, :except => [:destroy] do
resources :tasks, :except => [:index]
get "tasks/:id/change_state" => "tasks#change_state", :as => "task_change_state"
get "tasks/:id/assign_user" => "tasks#assign_user", :as => "task_assign_user"
get "tasks/:id/unassign" => "tasks#unassign", :as => "task_unassign"
end
パスに触れずに、これらのルートを少しリファクタリングする方法を考えています。私は次のことを試しました:
resources :projects, :except => [:destroy] do
resources :tasks, :except => [:index] do
member do
get 'change_state'
get 'assign_user'
get 'task_unassign'
end
end
end
しかし、それではルートメソッド名とタスクが複数形のままになります。元の get メソッド呼び出しと同じように、URL を複数形にする必要があります。ただし、アプリ全体で実装を変更したくないため、メソッド名は単数形にする必要があります。