在我之前的过滤器中,我调用一个包含以下代码的方法:
authorized_for_roles :administrator
在我的application_controller
def authorized_for_roles(*roles)
roles.each{|role_name| return true if current_user.role.name == role_name}
即使使用管理员角色登录,这似乎也不会返回true。我的语法不正确吗?
如果我将代码切换为刚读取
return true if current_user.is_an_administrator?
一切都很好。有人能告诉我如何修改代码来检查is_an吗?对于传递给方法的每个角色?我希望能够做一些像这样的事情
authorized_for_roles :administrator, :moderator
我试过
roles.each{|role_name|return true if current_user.try(:is_an, role_name)}
但这不起作用。
编辑:更改行间距,以便将代码段格式化为......
答案 0 :(得分:2)
你想使用Enumerable#any?方法。在你的第一个例子中:
def authorized_for_roles (*roles)
roles.any? { |role_name| current_user.role.name == role_name }
end