我的authlogic在我的应用程序中运行得很好,但我正在处理我自己的角色(我是更新的rails并想学习......)
所以我有一个用户模型,一个角色模型和一个用户会话模型。用户acts_as_authenticated。
在我的application_controller
中protect_from_forgery
helper_method :current_user, :is_admin, :is_group_coach, :is_group_leader
private
def current_user_session
return @current_user_session if defined?(@current_user_session)
@current_user_session = UserSession.find
end
def current_user
return @current_user if defined?(@current_user)
@current_user = current_user_session && current_user_session.record
end
def is_admin
current_user.role_id == 3
end
def is_group_coach
current_user.role_id == 2
end
def is_group_leader
current_user.role_id == 1
end
然后我在视图中做了一个简单的if is_admin ...
但它为nil返回未定义的方法`role_id':NilClass
我认为这样做是因为current_user实际上是在运行UserSession模型而不是User ...如何修改它以按预期运行?
答案 0 :(得分:0)
您的 current_user_session 方法可能在此代码段中不完整,因为您无法在没有参数的情况下调用查找,所以我猜测那里有一个警卫如果用户没有登录,则为nil值或某处。如果用户可能没有登录,则您的方法应该考虑到这一点,并且只在current_user上调用方法(如果有的话)。
你的方法应该是这样的:
def is_admin
current_user && current_user.role_id == 3
end
def is_group_coach
current_user && current_user.role_id == 2
end
def is_group_leader
current_user && current_user.role_id == 1
end
如果网站上当前没有用户登录,这将阻止测试中断。