2012-12-09 10 views
5

मैं रेल पर रूबी का उपयोग कर रहा हूं और यह जांचने की कोशिश कर रहा हूं कि कोई प्रश्न किसी मूल्य को वापस कर रहा है या नहीं। , क्वेरी एक परिणाम मिलते हैं तोरूबी-ऑन-रेल जांचें कि क्या क्वेरी परिणाम खाली है (Model.find)

@search = Customer.find_by_name($login_name) 

सब कुछ ठीक है, लेकिन मैं कैसे खाली परिणामों पर प्रतिक्रिया कर सकते हैं:

इस क्वेरी है?

मैंने कोशिश की:

if @search.empty? 
    flash[:notice] = 'Username nicht bekannt' 
    redirect_to :action => :login 
end 

लेकिन मैं कोई त्रुटि मिलती है:

undefined method `empty?' for nil:NilClass 

किसी भी विचार क्या गलत हुआ?

धन्यवाद !!!

उत्तर

20

उपयोग इस खाली मामलों के रूप में नहीं के बराबर की जांच करने के साथ ही:

@search.blank? 

विपरीत मामले (शून्य और नहीं खाली नहीं) के लिए, .present? का उपयोग करें:

@search.present? #equivalent of [email protected]? 

कारण आपकी क्वेरी लौटे empty के बजाय nil है:

Customer.find_by_name($login_name) 
हमेशा

सेवानिवृत्त कलश या वस्तु Customer में से एक परिणाम nil ऐसी कोई परिणाम नहीं है अगर,

जबकि कुछ की तरह:

Customer.where(:name=>$login_name) 

आप ActiveRecord::Relation (जो हो सकता है 0-एन परिणाम) हमेशा वापस आ जाएगी। और empty? विधि इस पर काम करेगी

+0

बढ़िया! अच्छी तरह से काम! आपका बहुत बहुत धन्यवाद! – Tobi89

1

यदि कोई परिणाम नहीं मिला है, तो find_by_name रिक्त सरणी की बजाय एक शून्य ऑब्जेक्ट देता है। यह देखने के लिए कि कोई ग्राहक पाया गया था, आप if @search.nil? या बस if [email protected] या unless @search का उपयोग कर सकते हैं, क्योंकि नील रूबी में झूठा है।

@search = Customer.find_by_name($login_name) 
unless @search 
    flash[:notice] = 'Username nicht bekannt' 
    redirect_to :action => :login 
end