我希望在凤凰城生成一条接受2个查询参数的路线。
get "/items?id=:id&action=:action", ActionController, :index_by
但是我收到以下错误:
(Plug.Router.InvalidSpecError) :identifier in routes must be made of letters, numbers and underscores
我注意到当我删除它编译得很好的第二个参数时,所以我猜这与分隔符&
有关,以便将查询字符串中的参数分开。
是否有另一种方法来指定多个这样的参数来区分路线?
答案 0 :(得分:1)
路由定义主要用于“干净网址”,因为它在请求路径上匹配(没有查询字符串)。
考虑到这一点,您可以像这样定义您的路线
get("item/:id/:action", ActionController, :index_by)
#Or
get("/items", ActionController, :index_by)
第一个路线定义将从请求路径中捕获id
和action
,例如GET / items / 1 / edit会在您的参数中为您提供%{"id"=>1, "action"=>"edit"}
。
第二个将从查询字符串中捕获id
和action
。例如GET "/items?id=1&action=delete"
会在你的参数中给你%{"id"=>1, "action"=>"delete"}
请注意,与第一个路径定义不同,第二个路径定义不强制查询字符串中存在id
或action
,因此您无法保证这些参数在您的参数中可用