2008-09-26 107 views
1

我正在研究一个简单的Web应用程序,它具有用户模型和角色模型(以及其他),以及包含许多控制器的管理部分。我想使用before_filter来检查会话中用户的用户是否有'can_access_admin'标志。RoR:从application.rb访问模型

我有这样的代码在application.rb中:

DEF check_role @user =会话[:用户]

如果@ user.role.can_access_admin.nil? || [email protected]_access_admin render:text =>“您当前的角色不允许访问管理区域。” 回报 结束 结束

,然后我有内部的管理控制器的一个验证码:

类联系:: BlogsController <的ApplicationController 的before_filter:check_role

高清名单 @blogList =博客。发现(:所有) 结束 结束

当我尝试查看列表动作我得到此错误:

未定义的方法“角色”的用户...

任何人知道我必须做的就是角色协会在application.rb中的认可? (请注意,关联配置正确,并且@ user.role在我尝试使用它的其他地方工作正常)

回答

6

只是一个猜测,但似乎你的会话[:用户]只是存储了ID,你需要这样做:

@user = User.find(session[:user]) 

或沿着这些行来从数据库中取出用户(及其关联)。

在滤镜之前也可以做上面的事情。

1

会话[:user]是否持有用户?或者user_id?在调用.role之前,您可能需要查找。

1

另外,如果您使用的是ActsAsAuthenticated或RestfulAuthentication或他们的弟兄,您也可以使用他们提供的current_user方法。