无法在凤凰城创建嵌套资源

时间:2018-01-20 17:20:13

标签: elixir phoenix-framework

我尝试创建一个按钮,让给定用户成为管理员。为此,我想为请求post /users/:id/admin创建路由。为此,我尝试创建一个嵌套资源:

resources "/users", UserController, only: [:new, :create, :index] do
  resources "/admin", UserController, only: [:post]
end

但是当我运行mix phx.routes | grep users时,我只获得这些路线:

user_path  GET     /users            StorexWeb.UserController :index
user_path  GET     /users/new        StorexWeb.UserController :new
user_path  POST    /users            StorexWeb.UserController :create

好像没有声明嵌套资源。我的资源声明有什么问题?我该如何解决?

3 个答案:

答案 0 :(得分:2)

问题出在only: [:post]。没有这样的行动:post,所以你最终没有任何结果。你可能想要这个:

resources "/users", UserController, only: [:new, :create, :index] do
  resources "/admin", UserController, only: [:create]
end

我将在凤凰城开辟一个问题,在这些案件中提出以避免进一步混淆。

答案 1 :(得分:0)

使用嵌套资源,这不是resource,而是scope。以下应该有效:

scope "/users" do
  resources "/", UserController, only: [:new, :create, :index]

  resources "/admin", UserController, only: [:post]
end

答案 2 :(得分:0)

对于这种情况,我更喜欢直接使用post / get而不是使用resources,因为我不会被迫使用特定的函数名称,例如create,尤其是嵌套资源的控制器只有一个端点/函数(例如/users/adminpost)。

resources "/users", UserController, only: [:new, :create, :index] do
  post "/admin", UserController, :post
end