我有这条路线:
resources "/my_items", ItemController, only: [:index, :show]
get "/pages/:page_number", ItemController, :page, param: "page_number"
我在ItemController
pages
采取了行动,这是一个简化版本:
def index(conn, p) do
# .....
def page(conn, %{"page_number" => page_num) when is_nil(page_num) do
index(conn, %{"page_number" => 1})
end
def page(conn, %{"page_number" => page_num) do
index(conn, %{"page_number" => page_num})
end
当我转到“/ pages / 123”时,它运行正常。但是,这个:
items_path(conn, :page, page_number: 456)
抛出异常:
protocol Phoenix.Param not implemented for [page_number: 456]
答案 0 :(得分:2)
您希望获得一张地图(基本上,Phoenix.Param
要转换为地图):
# ⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓
page(conn, %{"page_number" => page_num ...
你传递的内容是Keyword
,试图converted to a Param
。由于您已经声明了param名称,只需执行:
items_path(conn, :page, 456)
旁注:您的page
声明无效Elixir代码:此处需要关闭大括号。