Ruby on rails Ruby&&;陈述

Ruby on rails Ruby&&;陈述,ruby-on-rails,ruby,Ruby On Rails,Ruby,我的应用程序_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?

我的应用程序_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

我想通过删除一条语句来简化代码。我怎么能这样做呢?

除非某个东西相当于
如果!一些东西
。对你来说,那就是

if !(request.subdomain.empty? && current_user.nil?)
然而,你想要

if (!request.subdomain.empty? && !current_user.nil?)
使用布尔代数(De Morgan规则),您可以将其重写为

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

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

如果要将布局设置为
'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
最佳做法是避免
,除非
,除非是在最琐碎的情况下。

使用:

if (!request.subdomain.empty? && !current_user.nil?)
我从不使用
,除非
处理更复杂的内容(包含或/和),否则很难对这样的语句进行推理