2011-10-05 18 views
18

मैं अपने application_controller.rbरूबी जब तक && बयान

def layout 
    unless request.subdomain.empty? && current_user.nil? 
    self.class.layout 'admin' 
    end 
end 

में निम्नलिखित यह इसके ऊपर कोड काम नहीं कर रहा लगता है। लेकिन जब मैं निम्नलिखित करता हूं, तो यह काम करता है।

def layout 
    unless request.subdomain.empty? 
    unless current_user.nil? 
     self.class.layout 'admin' 
    end 
    end 
end 

मैं कथन तक एक को हटाकर कोड को सरल बनाना चाहता हूं। ऐसा कैसे किया जा सकता था?

उत्तर

55

unless somethingif !something के बराबर है। आपके मामले में, कि हो सकता है

if !(request.subdomain.empty? && current_user.nil?) 

हालांकि, अगर आप चाहते हैं

if (!request.subdomain.empty? && !current_user.nil?) 

बूलीय बीजगणित (डी मॉर्गन नियम) का उपयोग करना, आप को फिर से लिखने सकते हैं कि

if !(request.subdomain.empty? || current_user.nil?) 

करने का उपयोग करना unless

unless request.subdomain.empty? || current_user.nil? 
+0

आप मैन हैं। अच्छा उत्तर... – jaydel

8

आप 'admin' लिए लेआउट सेट करना चाहते हैं अगर उपडोमेन खाली नहींऔर वर्तमान उपयोगकर्ता है नहीं शून्य:

def layout 
    if !request.subdomain.empty? && !current_user.nil? 
    self.class.layout 'admin' 
    end 
end 

if बयानों और सकारात्मक विधेय उपयोग करने के लिए अपने तर्क बदलें, यह आपके कोड में तर्क को समझने में बहुत आसान बना देगा:

def layout 
    if request.subdomain.present? && current_user 
    self.class.layout "admin" 
    end 
end 

सर्वोत्तम अभ्याससे बचने के लिए है सबसे मामूली मामलों को छोड़कर।

4

उपयोग:

if (!request.subdomain.empty? && !current_user.nil?) 

मैं कुछ भी है कि अधिक जटिल है (शामिल है या/और) के साथ unless का उपयोग कभी नहीं, यह ऐसा एक बयान के बारे में तर्क करने की अभी भी मुश्किल है।

संबंधित मुद्दे