我正在尝试让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上传递参数并添加锚点?
答案 0 :(得分:0)
这是疯子。
看起来问题出在Hash vs HashWithIndifferentAccess;当您执行params.to_h
时,会得到一个HashWithIndifferentAccess
-网址帮助程序不会将其视为Hash
,并且无法将锚点拉出-因此,锚点将成为其中的一部分参数。
params.to_hash
为您提供“真实”哈希值;合并anchor: 'blah'
的工作符合预期。
(注意:最初,我认为这是因为键是字符串-但这是一个红色的鲱鱼; HashWithIndifferentAccess#symbolize_keys
返回的是真正的哈希值)
在这一点上,我很想引用自动生成的x_path
api文档,但是我很确定它根本不存在,并且代码令人困惑。反复试验在这里赢得了胜利。