我有一个 Rails 3 应用程序,我正在尝试实现设计和声明授权。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 对象不只是一个持久化在 Session 中的 User 对象吗?如果是这样,在 current_user 对象中设置实例值是否有一些锁定?