我应该检查我的用户是否存在以及用户是组织者还是管理员。这两列在我的表Users中是boolean。我怎么能纯粹处理它?此代码无效:
<% if current_user.try(:organizer?, :admin?) %>
如果我将or
用于if
语句,则效果很好。
<% if current_user.try(:organizer?) or current_user.try(:admin?) %>
答案 0 :(得分:3)
我使用
<% if current_user.try(:organizer?) || current_user.try(:admin?) %>
如果你不需要这样的东西很多。如果您经常需要权限检查,则可能需要查看支持此功能的工具。想到cancancan
或pundit
。
如果您想避免进行ored
次检查,并且不想将 pundit 或thelikes添加到您的堆栈,您可以为您的用户模型添加另一种方法:< / p>
def admin_or_operator?
admin? || operator?
end
然后使用它。当然,这种方法的可行性取决于您需要检查的不同角色和组合的数量。
另外:如果您经常需要检查用户是否存在(您实际需要try
的原因),那么您可以考虑使用 nil对象模式。
def current_user
find_actual_user || Guest.new
end
Guest
是一个对false
响应所有权限检查的对象。
还有一些指导原则:
try!
而不是try
,如果您使用的是ruby 2.4+,则应使用安全导航而不是try!
(Why is safe navigation better than using try in Rails? )||
而不是or
(https://github.com/bbatsov/ruby-style-guide#no-and-or-or)如果您想了解更多有关上述建议的原因,请查看stackoverflow或google。