5
我需要检查是否存在多个参数。 目前我所写的是检查是否存在多个参数
if params[:p1].present? && params[:p2].present? && params[:p3].present?
# Do something
end
有没有更有效的方式来做到这一点?
我需要检查是否存在多个参数。 目前我所写的是检查是否存在多个参数
if params[:p1].present? && params[:p2].present? && params[:p3].present?
# Do something
end
有没有更有效的方式来做到这一点?
可以使用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?)
在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
“如果您需要这些值”令人困惑,因为您并未将它们保存到变量中。 (另外,该行中有一个小的错字。)大概,这是你喜欢这种方法的唯一原因,因为与第一个不同,即使返回“false”并为这些值创建数组,也会获得所有值。 –