检查ruby对象的存在并在一行中测试该对象的属性

时间:2011-09-21 18:30:30

标签: ruby-on-rails ruby

这里有一个新手问题,但我保证谷歌真的很难。我想要做的是测试对象的属性并在一行中测试同一对象的存在。我能做到这一点:

user = User.find_by_id(user_id)
if user
  if user.access_token == params[:access_token]
    puts "success"
  else
    puts "failure"
  end
else
  puts "failure"
end

我想认真重新考虑这一点并摆脱嵌套的if语句。事情是,我不能做像

这样的事情
if user && user.access_token

因为在用户实际为nil的情况下,Ruby在尝试评估nil.access_token时会抛出错误。有人知道将这个重新分解成一行的实际正确方法吗?甚至是可能的,还是嵌套的if语句是唯一的方法?

1 个答案:

答案 0 :(得分:1)

执行user && user.access_token很好,因为Ruby会在遇到一个false条件时停止评估表达式。

这称为short circuit evaluation