Есть ли способ определить пользовательские маршруты в Финиксе?
Скажем, я хочу создать resources
с добавлением к нему нескольких настраиваемых действий, аналог в рельсах:
resources :tasks do
member do
get :implement
end
end
Который вернет мне не только 7 стандартных маршрутов, но 1 новый:
GET /tasks/:id/implement
Как я могу сделать это в phoenix?
Ответы
Ответ 1
Я хочу улучшить Dogbert
немного:
resources "/tasks", TaskController do
get "/implement", TaskController, :implement, as: :implement
end
Единственное дополнение - as: :implement
в конце маршрута.
Таким образом, вы получите маршрут с именем task_implement_path
вместо уродливого task_task_path
.
Ответ 2
Вы можете добавить get
в блок do
resources
.
Web/router.ex
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
Ответ 3
Вот еще одно решение:
scope "/tasks" do
get "/:id/implement", TasksController, :implement
get "/done", TasksController, :done
end
resources "/tasks", TasksController
Действие implement
имеет маршрут участника, а действие done
имеет маршрут сбора.
Вы можете получить путь для первого с помощью этого вызова функции:
tasks_path(@conn, :implement, task)
Обратите внимание, что вы должны поместить строку resources
после блока scope
. В противном случае Phoenix распознает /tasks/done
как путь для действия show
.
Ответ 4
Похоже, что маршрут сбора должен быть:
get "tasks/implement", Tasks, :implement # collection route
Я не думаю, что у phoenix есть маршруты ресурсов для членов/коллекций, такие как rails.
Я нашел эту ссылку: они немного рассказывают о маршрутах сбора и приводят пример, подобный тому, который я включил выше:
https://github.com/phoenixframework/phoenix/issues/10