我的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
我想通过删除一个除非语句来简化代码。我怎么能这样做?
答案 0 :(得分:60)
unless something
相当于if !something
。在你的情况下,那将是
if !(request.subdomain.empty? && current_user.nil?)
但是,你想要
if (!request.subdomain.empty? && !current_user.nil?)
使用布尔代数(De Morgan规则),您可以将其重写为
if !(request.subdomain.empty? || current_user.nil?)
使用unless
unless request.subdomain.empty? || current_user.nil?
答案 1 :(得分: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
最佳做法是避免unless
,除非在最琐碎的情况下。
答案 2 :(得分:5)
使用:
if (!request.subdomain.empty? && !current_user.nil?)
我从不将unless
用于任何更复杂的东西(包含或/和),这样的陈述太难以理解。