devise和current_user

时间:2010-12-19 17:56:52

标签: ruby-on-rails devise declarative-authorization

我有一个Rails 3应用程序,我正在尝试实现设计和declarative_authorization。 declarative_authorization的一个重要部分是在用户模型中存在函数“role_symbols”。 由于我实现角色的方式,我在User模型中实现一个实例方法来跟踪一个值(让我们调用foo):

  attr_accessor :foo

  def foo=(val)
    @foo = val
  end

  def foo
    @foo
  end

然后我们将在role_symbols方法中使用foo的值来限制有效角色,可能是这样的:

def role_symbols
  roles.where("foo = ?", @foo).name.underscore.to_sym
end

问题是当我尝试为控制器中的current_user设置foo的值时,该值不会粘住,例如:

current_user.foo = 99

成功,但当我检查另一个视图(或控制器)中的值时,current_user.foo的值为nil。

current_user对象不仅仅是会话中持久存在的User对象吗? 如果是这样,在current_user对象中设置实例值是否存在锁定?