我的Ruby on Rails应用控制器之一有以下方法:
decoded_translations = params[:translations].collect do |encoded_source, encoded_translation|
decoded_source = URI.decode(encoded_source).gsub("\r\n", "\n")
decoded_translation = URI.decode(encoded_translation).gsub("\r\n", "\n")
[decoded_source, decoded_translation]
end
当我运行我的测试时,这会让我回复:
undefined method `collect' for #<ActionController::Parameters:0x007ff0e810c6e8>
我该如何解决这个问题?
答案 0 :(得分:0)
在对参数中的数组/散列提交使用 collect 方法之前,您已经允许所需的参数并将其转换为数组/散列。然后我们才能在其上应用收集方法。
例如:
permit_params = params.permit(refresh: [:key, :scope, types: []])
permit_params[:refresh].methods.grep /collect/
# => []
permit_params[:refresh].to_h.methods.grep /collect/
# => [:collect, :collect_concat]
params[:refresh].to_h
# => ActionController::UnfilteredParameters: unable to convert unpermitted parameters to hash
# from /Users/mohanrajr/.rbenv/versions/2.2.2/gemsets/<app>/gems/actionpack-5.1.2/lib/action_controller/metal/strong_parameters.rb:258:in `to_h'