Elixir 在Phoenix中为URL创建查询字符串
在我的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"] 如何修复此问题?要从关键字列表构建查询字符串,可以使用: 但这似乎不是问题所在。如果
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")
获取“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")