Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 在Phoenix中为URL创建查询字符串_Elixir_Phoenix Framework - Fatal编程技术网

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

Elixir 在Phoenix中为URL创建查询字符串,elixir,phoenix-framework,Elixir,Phoenix Framework,在我的Phoenix应用程序中,我想向URL添加一个查询字符串: some_cool_path(@conn, :index, "view-mode": "table") 我希望它会生成一个URL,如/some\u cool?view mode=table,但它会引发一个异常: protocol Phoenix.Param not implemented for ["view-mode": "table"] 如何修复此问题?要从关键字列表构建查询字符串,可以使用: 但这似乎不是问题所在。如果

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

some_cool_path(@conn, :index, "view-mode": "table")
我希望它会生成一个URL,如
/some\u cool?view mode=table
,但它会引发一个异常:

protocol Phoenix.Param not implemented for ["view-mode": "table"]

如何修复此问题?

要从关键字列表构建查询字符串,可以使用:


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

例如:

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

    users_path(@conn, :show, @user.username, "view-mode": "table")
    

你能把路由器代码贴在你定义这个路由的地方吗?@Dogbert,只是一个普通路由
获取“some_cool”,Controller1,:action1
如果你的控制器和操作名称正确,你的代码是正确的。该错误消息表示路由实际上在URL中有一个强制参数<代码>post_路径(MyApp.Endpoint,:index,“查看模式”:“表”)#=>“/posts?查看模式=表”。你能在路由器中粘贴生成
某个路径的确切线路吗?@Dogbert,没问题,我已经修好了。你确定吗?如果您手动对查询进行编码并按照下面的答案进行传递,您可能会得到
/some\u cool/view mode=table
,即不是查询字符串。谢谢。还有一个问题:假设我有一个带有“#”的url-->
example.com/something\as#u table
example.com/something\as#u chart
。在一个动作中,如何在控制器中进行模式匹配或解构?也就是说,它希望获得
#
后面的值,它被称为锚点或片段,在服务器端不可用,只有客户端可用。
users_path(@conn, :show, @user.username, "view-mode": "table")