deviseとdeclarative_authorizationを実装しようとしているRails3アプリがあります。declarative_authorizationの重要な部分は、ユーザーモデル内に関数「role_symbols」が存在することです。ロールを実装する方法のために、ユーザーモデル内にインスタンスメソッドを実装して、値を追跡します(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オブジェクト内のインスタンス値の設定にいくつかのロックがありますか?