我需要检查多个参数的存在。 目前我所写的是
if params[:p1].present? && params[:p2].present? && params[:p3].present?
# Do something
end
有更有效的方法吗?
答案 0 :(得分:15)
您可以使用Enumerable.all?
方法:
%i( p1 p2 p3 ).all? { |key| params[key].present? }
另一种选择,如果您需要值,则可以获取它们并检查其存在。
params.values_at(*%i( p1 p2 p3 )).all?(&:present?)
或
params.values_at(:p1, :p2, :p3).all?(&:present?)
答案 1 :(得分:0)
在Rails中,您可以使用Hash#slice
来确定散列中是否存在所需的键。
# Below require is needed only in stand-alone program for testing purposes
require 'active_support/core_ext/hash'
params = {:p1=>"1", :p2=>"2", :p3 => "3", :p4=>"4"}
mandatory_keys = [:p1, :p2, :p3]
if (params.slice(*mandatory_keys).values.all?(&:present?)
puts "All mandatory params present"
else
puts "Mandatory params missing"
end