Ruby on rails Ruby检查一行中是否存在记录和关联

Ruby on rails Ruby检查一行中是否存在记录和关联,ruby-on-rails,ruby,if-statement,Ruby On Rails,Ruby,If Statement,我经常遇到的事。我想这样做: if current_user.exists? && current_user.role == "admin" # Do something end 显然,如果当前用户不存在,那么这将不起作用,因为它为nil类返回未定义的方法角色 有没有一种方法可以在一行中实现上述功能,而无需多个If语句?试试: if current_user&.role == "admin" &是一个安全的导航器-如果前面的部分为nil,则方法链的其余部分将不会执

我经常遇到的事。我想这样做:

if current_user.exists? && current_user.role == "admin"
  # Do something
end
显然,如果当前用户不存在,那么这将不起作用,因为它为nil类返回
未定义的方法角色

有没有一种方法可以在一行中实现上述功能,而无需多个If语句?

试试:

if current_user&.role == "admin"
&
是一个安全的导航器-如果前面的部分为nil,则方法链的其余部分将不会执行,只返回nil而不是抛出错误


更多阅读:

您可以使用传统的
。试试

当前用户。尝试(:角色)==“管理员”

或者使用ruby
=2.3.0


current_user&.role==“admin”

既然您想检查“记录是否存在和关联”,您可能想尝试
&
而不是
|
:-)啊,是的。。我想我问的是这两个问题,但好的捕获我会更新
&
的右侧,如果左侧是
nil
false
,则不会计算
&
的右侧。因此,只有当第一个条件通过时,即如果用户存在,才会调用当前用户角色。在这种情况下不会发生异常。“方法链的其余部分不会执行”-它仍然会执行
nil==“admin”
,这也是
false
,但原因不同。