Elixir 菲尼克斯有没有办法定义自定义路线?
假设我想创建一个Elixir 菲尼克斯有没有办法定义自定义路线?,elixir,phoenix-framework,Elixir,Phoenix Framework,假设我想创建一个resources,在其中添加一些自定义操作,rails中的类似功能是: resources :tasks do member do get :implement end end 这将使我不仅返回7条标准路线,而且返回1条新路线: GET /tasks/:id/implement 如何在phoenix中执行此操作?您可以在do块的resources中添加get web/router.ex $mix phoenix.routes task_path
resources
,在其中添加一些自定义操作,rails中的类似功能是:
resources :tasks do
member do
get :implement
end
end
这将使我不仅返回7条标准路线,而且返回1条新路线:
GET /tasks/:id/implement
如何在phoenix中执行此操作?您可以在
do
块的resources
中添加get
web/router.ex
$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
我想改进一下Dogbert的答案:
resources "/tasks", TaskController do
get "/implement", TaskController, :implement, as: :implement
end
唯一添加的是路线末端的as::implement
因此,您将获得名为
task\u implement\u path
的路由,而不是丑陋的task\u task\u path
看起来收集路由必须是:
get "tasks/implement", Tasks, :implement # collection route
我认为phoenix没有rails那样的成员/集合资源路由
我发现这个链接是他们讨论了一些收集路线,并给出了一个类似于我上面提到的示例:
这里是另一个解决方案:
scope "/tasks" do
get "/:id/implement", TasksController, :implement
get "/done", TasksController, :done
end
resources "/tasks", TasksController
implement
操作有一个成员路由,done
操作有一个收集路由
您可以通过以下函数调用获取前者的路径:
tasks_path(@conn, :implement, task)
请注意,您应该将
资源
行放在范围
块之后。否则,Phoenix会将/tasks/done
识别为show
操作的路径。我如何在该元素中描述收集
?还想知道如何将其用于资源下的收集路线。获取“任务/实施”,任务,:implement#collection route如何定义GET/tasks/implement
?这确实是一个很好的技巧。你如何描述收集路径?我得到了一个未定义的函数task\u implement\u path/1
,有什么想法吗?好吧,我的错,我用task\u implement\u path(task)
而不是task\u implement\u path来命名它(康涅狄格州:工具,任务)
。不过不是很干。
tasks_path(@conn, :implement, task)