url_helper 合并所需参数时出错
url_helper error when merging in required parameter
我正在尝试将一个值合并到 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
,我想在视图中生成一个link到/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
键...
ActionController::Parameters
使用 HashWithIndifferentAccess
将键存储为字符串而不是符号。但是 routing URL helpers 要求参数位于符号键中。因此,正如错误中提到的那样,arg_2
需要在符号键中。
尝试创建一个新的普通哈希:
test_test_action_two_path({arg_1: "value_1", arg_2: "value_2"})
我正在尝试将一个值合并到 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
,我想在视图中生成一个link到/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
键...
ActionController::Parameters
使用 HashWithIndifferentAccess
将键存储为字符串而不是符号。但是 routing URL helpers 要求参数位于符号键中。因此,正如错误中提到的那样,arg_2
需要在符号键中。
尝试创建一个新的普通哈希:
test_test_action_two_path({arg_1: "value_1", arg_2: "value_2"})