我有以下if语句:
if !projectid_viewing.nil? && !user.role(projectid_viewing).nil? && user.role(projectid_viewing) == 'admin'
我正在尝试使用上面的内容,不是if break是projectid_viewing或user.role是nil。 projectid_viewing似乎工作得很好,但user.role不断破坏,给出以下错误:
undefined method `role' for nil:NilClass
你能帮助我使用if语句吗?是否有更优雅的方式来编写语句?
答案 0 :(得分:5)
你需要确保用户也不是零。
请注意,在Ruby中,条件语句中的值为nil将被解释为false。因此,如果在条件语句中使用带有nil值的变量,它也将计算为false。知道了这一点,您可以将!projectid_viewing.nil?
等语句简化为变量的名称,并且它的工作方式也相同。
if projectid_viewing && user && user.role(projectid_viewing) == 'admin'
以上只是简单的Ruby,但是你说你正在使用Rails 3.Rails有一个简洁的方法:Object#try。它允许您将此语句进一步简化为以下内容:
if projectid_viewing && user.try(:role, projectid_viewing) == 'admin'
如果user的值为nil,则Object#try方法将保护您,并且表达式的整个第二部分将返回nil(即false)。