2008-09-26 110 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方法。