如何通过UserSession模型提取User.role_id

时间:2011-07-31 19:02:23

标签: ruby-on-rails authlogic roles

我的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 ...如何修改它以按预期运行?

1 个答案:

答案 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

如果网站上当前没有用户登录,这将阻止测试中断。