2016-01-13 12 views
5

複数のパラメータの存在を確認する必要があります。 現在、私が書いたものを複数のパラメータの存在を確認してください

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

これを行うには、より効率的な方法はありますか?あなたが値を必要とする場合

%i(p1 p2 p3).all? { |key| params[key].present? } 

別の方法、それはそれらを取得するために、プレゼンスを確認してください。

答えて

14

あなたがEnumerable.all?メソッドを使用することができます。 Railsでは

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

または

params.values_at(:p1, :p2, :p3).all?(&:present?) 
+0

"値が必要な場合"は変数に保存しないので混乱します。おそらく、これは、最初の方法とは違って、 'false'が返されてもすべての値を取得し、それらの値の配列を作成するので、そのアプローチを好む唯一の理由です。 –

0

、あなたは必要なキーがハッシュに存在しているかどうかを把握する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 
関連する問題