我想迭代提交的参数。 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
当你不知道你期望什么时,我如何迭代参数?
答案 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