Elixir生成一个带“?”的网址代替 ”/”

时间:2017-02-14 04:01:03

标签: elixir phoenix-framework

我有这条路线:

    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]

1 个答案:

答案 0 :(得分:2)

您希望获得一张地图(基本上,Phoenix.Param要转换为地图):

#          ⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓
page(conn, %{"page_number" => page_num ...

你传递的内容是Keyword,试图converted to a Param。由于您已经声明了param名称,只需执行:

items_path(conn, :page, 456)

旁注:您的page声明无效Elixir代码:此处需要关闭大括号。