我尝试创建一个按钮,让给定用户成为管理员。为此,我想为请求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
好像没有声明嵌套资源。我的资源声明有什么问题?我该如何解决?
答案 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/admin
和post
)。
resources "/users", UserController, only: [:new, :create, :index] do
post "/admin", UserController, :post
end