2016-01-13 104 views
5

我需要检查是否存在多个参数。 目前我所写的是检查是否存在多个参数

if params[:p1].present? && params[:p2].present? && params[:p3].present? 
    # Do something 
end 

有没有更有效的方式来做到这一点?

回答

14

可以使用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?) 
+0

“如果您需要这些值”令人困惑,因为您并未将它们保存到变量中。 (另外,该行中有一个小的错字。)大概,这是你喜欢这种方法的唯一原因,因为与第一个不同,即使返回“false”并为这些值创建数组,也会获得所有值。 –

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