いくつかのカスタムアクションを追加してresources
を作成したいとします。Railsのアナログは次のとおりです。
resources :tasks do
member do
get :implement
end
end
これにより、7つの標準ルートだけでなく、1つの新しいルートが返されます。
GET /tasks/:id/implement
フェニックスでどうすればいいですか?
Dogbert
の答えを少し改善したい:
resources "/tasks", TaskController do
get "/implement", TaskController, :implement, as: :implement
end
唯一の追加は、ルートの最後のas: :implement
です。
したがって、醜いtask_implement_path
ではなくtask_task_path
という名前のルートを取得します。
get
のdo
ブロック内にresources
を追加できます。
resources "/tasks", TaskController do
get "/implement", TaskController, :implement
end
$ mix phoenix.routes
task_path GET /tasks MyApp.TaskController :index
task_path GET /tasks/:id/edit MyApp.TaskController :edit
task_path GET /tasks/new MyApp.TaskController :new
task_path GET /tasks/:id MyApp.TaskController :show
task_path POST /tasks MyApp.TaskController :create
task_path PATCH /tasks/:id MyApp.TaskController :update
PUT /tasks/:id MyApp.TaskController :update
task_path DELETE /tasks/:id MyApp.TaskController :delete
task_task_path GET /tasks/:task_id/implement MyApp.TaskController :implement
別の解決策は次のとおりです。
scope "/tasks" do
get "/:id/implement", TasksController, :implement
get "/done", TasksController, :done
end
resources "/tasks", TasksController
implement
アクションにはmemberルートがあり、done
アクションにはcollectionルートがあります。
この関数呼び出しで前者のパスを取得できます。
tasks_path(@conn, :implement, task)
resources
行afterscope
ブロックを配置する必要があることに注意してください。それ以外の場合、Phoenixは/tasks/done
をshow
アクションのパスとして認識します。