1

我正在尝试让 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')

我得到哈希代替格式,而不是正确的参数(即 no ?):

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

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

4

1 回答 1

1

好吧,这太疯狂了。

看起来问题是Hash vs HashWithIndifferentAccess;当你这样做时params.to_h,你会得到一个HashWithIndifferentAccess- url 助手不会像 a 那样对待它Hash,并且不能将锚拉出 - 所以锚成为参数的一部分。

params.to_hash给你一个“真正的”哈希;合并anchor: 'blah'按预期工作。

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

在这一点上,我很想参考自动生成的x_pathapi 文档,但我很确定它根本不存在,而且代码让人难以理解。反复试验在这里赢得了胜利。

于 2019-07-01T17:17:53.133 回答