【问题标题】:Elixir generates a url with "?" instead of "/"Elixir 生成一个带有“?”的 url代替 ”/”
【发布时间】:2017-02-23 18:20:42
【问题描述】:

我有这条路线:

    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]

【问题讨论】:

    标签: elixir phoenix-framework


    【解决方案1】:

    您希望得到一张地图(基本上,Phoenix.Param 将在那里转换为地图):

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

    您传递的内容是Keyword,它被尝试为converted to a Param。由于您已经声明了参数名称,因此只需:

    items_path(conn, :page, 456)
    

    旁注:您的 page 声明不是有效的 Elixir 代码:此处需要大括号。

    【讨论】:

      猜你喜欢
      • 2019-08-06
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2019-05-11
      • 2017-12-09
      • 2015-01-16
      • 1970-01-01
      • 2011-08-22
      相关资源
      最近更新 更多