gpt4 book ai didi

ruby-on-rails - 指定 anchor 时,路径助手将 "/search?option=..."更改为 "/search.option=..."

转载 作者:行者123 更新时间:2023-12-01 13:43:53 24 4
gpt4 key购买 nike

我有一个看似简单的 Rails 路径助手案例。我的路线很简单:

get 'search', to: 'search#search_results'

$ rails routes
...
search GET /search(.:format) search#search_results

我需要注入(inject) option=graph参数到当前页面的查询字符串中。这按预期工作:
<%= link_to "Graphs", search_path(request.query_parameters.merge({:option => "graphs"})) %>

给出这样的链接:

http://localhost:3000/search?body=&commit=Search&feedback=&option=graphs&reason=&site=&title=&user_rep_direction=%3E%3D&user_reputation=0&username=&utf8=%E2%9C%93&why=foo

但是,当我指定 anchor参数,奇怪的事情发生了:
search_path(request.query_parameters.merge({:option => "graphs"}), anchor: "graph-1")

http://localhost:3000/search.body=&commit=Search&feedback=&option=graphs&reason=&site=&title=&user_rep_direction=%253E%253D&user_reputation=0&username=&utf8=%25E2%259C%2593&why=foo#graph-1

anchor 按预期添加,但 ?开始查询字符串变成 . - 这会激怒 Controller ,因为它是一种无法识别的格式。

为什么会发生这种情况,我该如何解决?

在 Ruby 2.2.2 上运行 Rails 5 beta 4

最佳答案

经过一些测试,事实证明您应该 合并参数时包含 anchor :

search_path(request.query_parameters.to_h.merge({option: "graphs", anchor: "graph-1")})

解释:你的方法,即:
search_path(request.query_parameters.merge({:option => "graphs"}), anchor: "graph-1")

实际通过 两个单独的哈希 作为 search_path 的参数 helper ,而不仅仅是一个。然而,在 helper definition code , 仅 最后一个哈希 参数被视为助手的真实选项参数。其他参数的处理方式不同。

最后, anchor参数被助手理解为格式说明符(我通过调试助手中的路径构造发现了这一点,但无法指向源代码中的精确位置),这就是生成的路径包含点 . 的原因在资源名称之后。

更新:请注意, query_parameters还必须转换为散列,因为它们通常属于 ActionController::Parameters并且在路径助手中也有不同的处理。在将所有参数和 anchor 统一到 Hash 之后类,路径应该是正确的。

关于ruby-on-rails - 指定 anchor 时,路径助手将 "/search?option=..."更改为 "/search.option=...",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37261640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com