检查多重哈希键(如果存在)

时间:2016-01-20 16:46:27

标签: ruby-on-rails ruby

重构这种情况的任何提示?

 params = {:p1=>"foo", :p2=>true, :p3=>nil, :pN=>""}

 if params[:p1].present? && params[:p2].present? && params[:pN].present?
  # do something...

3 个答案:

答案 0 :(得分:3)

这样的事情:

params.values_at(:p1, :p2, :pN).all?(&:present?)

答案 1 :(得分:1)

if params.values_at(*%i[p1 p2 p3]).all?(&:present?)

values_at会为您提供的每个密钥返回Array个值。 如果可枚举的每个成员的谓词(all?)为true,则present?truevalues_at将包含nil以查找缺失的密钥(而不是省略它),因此您无需担心数组会折叠为仅显示值。

答案 2 :(得分:1)

keys = [:p1, :p2, :pN]

puts "hi" if keys.all? { |k| params[k].present? }

这样做的好处是,只要params[k].present?false,就会终止哈希查找。