我试图找出如何在用户登录Ruby / Rails3应用程序后根据他们的角色重定向某些URL的用户。
到目前为止,我已经使用authlogic gem进行身份验证,并使用cancan gem进行角色设置。
角色就像这样(在app / models / user.rb中定义):
class User < ActiveRecord::Base
acts_as_authentic
ROLES = %w[admin customer demo]
end
现在有app / controllers / user_session_controller.rb正在处理登录。 我想做这样的事情:
for r in User.role
if r == "admin"
redirect_to admins_url
else
redirect_to users_url
end
end
由于以下错误,这不起作用:
"undefined method `role' for #<Class:0xb5bb6e88>"
如何根据用户的角色将用户重定向到某些网址,是否有简单或优雅的方法?
(角色在用户表的mysql列'role'中定义。)
答案 0 :(得分:1)
for r in User.role
令人困惑。您是否尝试访问该类中定义的ROLES数组,或者您是否尝试访问当前用户的角色值?
如果您尝试访问ROLES数组,请使用User::ROLES
。
使用authlogic,通常在application_controller中定义current_user。因此,可以使用current_user.role
所以你的代码看起来像
if current_user.role == "admin"
redirect_to admins_url
else
redirect_to users_url
end
答案 1 :(得分:1)
你一定要看看CanCan。这是管理用户角色和能力的一种非常合理的方式。