在Phoenix中为URL创建查询字符串

Jod*_*oro 1 elixir phoenix-framework

在我的Phoenix应用程序中,我想向URL添加查询字符串:

some_cool_path(@conn, :index, "view-mode": "table")
Run Code Online (Sandbox Code Playgroud)

我希望它会生成类似的URL /some_cool?view-mode=table,但会引发异常:

protocol Phoenix.Param not implemented for ["view-mode": "table"]
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

She*_*yar 5

要从关键字列表构建查询字符串,可以使用URI.encode_query/1

iex(1)> URI.encode_query("view-mode": "table")
"view-mode=table"
Run Code Online (Sandbox Code Playgroud)

但这似乎不是这里的问题。如果您的路由具有一些必需的参数,则需要在传递查询关键字列表之前指定所有参数。

例如:

  • 如果您的路线类似于/users,则上面的代码将起作用。
  • 但是,如果它具有类似的必需参数/users/:id,则在指定查询字符串的关键字列表之前,您首先需要传递必需的参数。因此,您应该这样调用:

    users_path(@conn, :show, @user.username, "view-mode": "table")
    
    Run Code Online (Sandbox Code Playgroud)