Ruby on Rails:迭代嵌套参数

时间:2014-05-13 01:54:17

标签: ruby-on-rails ruby

我想迭代提交的参数。 Params数组可以达到三个级别。目前我只能像这样迭代第一级。

params[:job].each do |v, k|
    #do something with k value, only if it's string. If it's array then find its string value.
end

当你不知道你期望什么时,我如何迭代参数?

2 个答案:

答案 0 :(得分:1)

一种简单的方法是使用is_a?

if v.is_a? Array
  # do whatever
elsif v.is_a? String
  # do whatever
else
  # something else
end

某种递归解决方案在这里可能最好,例如:

def handle_hash hash
  hash.each do |k, v|
    if v.is_a? Hash
      handle_hash v
    elsif v.is_a? String
      # handle string
    end
  end 
end

然后你可以拨打handle_hash params[:job]

答案 1 :(得分:0)

def nested_params(nested_hash={})  
      nested_hash.each_pair do |k,v|
        case v
          when String, Fixnum then 
            dosomething(v)
          when Hash then nested_params(v)
          else raise ArgumentError, "Unhandled type #{v.class}"
        end
      end
  end