2011-10-05 15 views
18

私は私のapplication_controller.rbで次のようにしています。&&ステートメント以外のRuby

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 

私は1つのステートメントを削除してコードを簡素化したいと思います。どうすればいい?

答えて

55

unless somethingは、if !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

あなたはThe Manです。いい答え... – jaydel

8

サブドメインがないある場合は'admin'にレイアウトを設定したい場合は、現在のユーザーがない nilである:、

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を使用することはありませんが、それはそのような声明をおよそ理由にあまりにも難しいです。

関連する問題