未定义的方法`collect'用于#<actioncontroller :: parameters:0x007ff0e810c6e8>

时间:2017-09-18 09:54:47

标签: ruby-on-rails ruby

我的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>

我该如何解决这个问题?

1 个答案:

答案 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'