rails url_helper将参数放置在应设置格式的位置

时间:2019-07-01 17:17:53

标签: ruby-on-rails parameters rails-routing url-helper

我正在尝试让Rails生成_path方法给我

/terms_and_conditions?utm_source=source&utm_campaign=pain#some_link

因此,我在控制器中尝试了以下操作:

utm_params = {"utm_source" => "sauce", "utm_campaign" => "pain"} # from params
redirect_to terms_and_conditions_path(utm_params.merge(anchor: 'some_link')

我得到了,以锚点为参数:

/terms_and_conditions?anchor=some_link&utm_source=source&utm_campaign=pain

如果我尝试

terms_and_conditions_path(utm_params, anchor: 'some_link')

我用哈希代替格式,而不是适当的参数(即没有?):

/terms_and_conditions.utm_source=source&utm_campaign=pain#some_link

我应该如何在params上传递参数并添加锚点?

1 个答案:

答案 0 :(得分:0)

这是疯子。

看起来问题出在Hash vs HashWithIndifferentAccess;当您执行params.to_h时,会得到一个HashWithIndifferentAccess-网址帮助程序不会将其视为Hash,并且无法将锚点拉出-因此,锚点将成为其中的一部分参数。

params.to_hash为您提供“真实”哈希值;合并anchor: 'blah'的工作符合预期。

(注意:最初,我认为这是因为键是字符串-但这是一个红色的鲱鱼; HashWithIndifferentAccess#symbolize_keys返回的是真正的哈希值)

在这一点上,我很想引用自动生成的x_path api文档,但是我很确定它根本不存在,并且代码令人困惑。反复试验在这里赢得了胜利。