是否可以针对已退出用户执行以下操作,而不会在nil错误时触发.consumer
被调用?
if signed_in? && current_user.consumer
puts "Hello world"
end
对于我的大部分网站,我不得不嵌套这些类型的条件:
if signed_in?
if current_user.consumer
end
end
...看起来并不那么糟糕,但是当你在页面上有很多其他代码时,它可能很麻烦。
我想要陈述signed_in?
被评估,如果为真,则评估第二个条件...但是所有都在一行中。这可能吗?
答案 0 :(得分:1)
是的! Ruby支持短路逻辑,因此您的第一个代码块将完全按照您的意愿执行:如果signed_in?
求值为false
,则Ruby解释器将是惰性的,并且不会考虑其余的条件。
同样,如果用户未登录,!signed_in? || current_user.banned?
会在发现!signed_in?
为true
并且无需评估current_user.banned?
的情况下发生短路。