2016-01-13 8 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? विधि का उपयोग कर सकते हैं।

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

या

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

"यदि आपको मूल्यों की आवश्यकता है" भ्रमित है क्योंकि आप उन्हें एक चर में सहेज नहीं रहे हैं। (इसके अलावा, उस पंक्ति में एक छोटा टाइपो है।) संभवतया, यही कारण है कि आप उस दृष्टिकोण का पक्ष लेंगे, जैसा कि पहले के विपरीत है, यह सभी मान प्राप्त करता है जब भी 'झूठी' वापस आती है और उन मानों के लिए सरणी बनाती है। –

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 
संबंधित मुद्दे