Ruby方法'尝试'有两个条件

时间:2017-07-22 20:14:47

标签: ruby

我应该检查我的用户是否存在以及用户是组织者还是管理员。这两列在我的表Users中是boolean。我怎么能纯粹处理它?此代码无效:

 <% if current_user.try(:organizer?, :admin?) %>

如果我将or用于if语句,则效果很好。

<% if current_user.try(:organizer?) or current_user.try(:admin?) %>

1 个答案:

答案 0 :(得分:3)

我使用

<% if current_user.try(:organizer?) || current_user.try(:admin?) %>

如果你不需要这样的东西很多。如果您经常需要权限检查,则可能需要查看支持此功能的工具。想到cancancanpundit

如果您想避免进行ored次检查,并且不想将 pundit 或thelikes添加到您的堆栈,您可以为您的用户模型添加另一种方法:< / p>

def admin_or_operator?
  admin? || operator?
end

然后使用它。当然,这种方法的可行性取决于您需要检查的不同角色和组合的数量。

另外:如果您经常需要检查用户是否存在(您实际需要try的原因),那么您可以考虑使用 nil对象模式

def current_user
  find_actual_user || Guest.new
end

Guest是一个对false响应所有权限检查的对象。

还有一些指导原则:

如果您想了解更多有关上述建议的原因,请查看stackoverflow或google。