合并必需的参数

时间:2018-11-11 18:36:28

标签: ruby-on-rails ruby url ruby-on-rails-5 actioncontroller

我正在尝试将值合并到params哈希中,并将生成的哈希值传递给url帮助器。 (使用Rails 5)

例如。我有以下路线

routes.rb

get 'test-url/:arg_1' => 'test#test_action_1', :as => 'test_test_action_one'
get 'test-url/:arg_1/:arg_2' => 'test#test_action_2', :as => 'test_test_action_two'

用户访问了/test-url/value-1,我想在视图中生成一个指向/test-url/value-1/value-2的链接

查看文件中

link_to test_test_action_two_url(params.permit(:arg_1).merge(arg_2: 'value-2'))

我收到以下错误:

No route matches {:action=>"test_action_2", :arg_1=>"value-1", "arg_1"=>"value-1", "arg_2"=>"value-2", :controller=>"test"} missing required keys: [:arg_2]

ActionController::Parameters对象实际上是在维护内部哈希(with_indifferent_access)。在merge之后,散列仍然具有indifferent_access权限,您可以使用符号或字符串访问arg_2

但是,我不确定为什么URL生成器无法找到:arg_2键...

1 个答案:

答案 0 :(得分:1)

ActionController::Parameters使用HashWithIndifferentAccess将密钥存储为字符串而不是符号。但是路由URL助手需要将参数放在符号键中。因此,正如错误所提到的,arg_2必须在符号键中。

Why does Rails' `HashWithIndifferentAccess` store keys as strings and not symbols?

尝试创建一个新的普通哈希:

test_test_action_two_path({arg_1: "value_1", arg_2: "value_2"})