Rails は、モデル内のセッション情報にアクセスできないように設計されているため、やりたいことがうまくできません。これは、MVC での古典的な関心の分離です。モデルは他のレイヤーとは独立して動作することを意図しており、セッションを持たない Rake やその他のシステム タスクで作業を開始すると、モデルが機能してくれることに感謝するでしょう。
の
cattr_accessor :current_ip
恐ろしいアプローチです。これはハックであり、その理由は明らかです。はい、うまくいくかもしれませんが、この問題に対する間違ったアプローチです。
「誰が」「何を」行ったかを IP で追跡しているため、これが発生する論理的な場所はコントローラー層です。Rails Recipes ブックで概説されているように、CacheSweepers をオーディターとして使用するなど、いくつかの方法があります。CacheSweepers はモデルを監視できますが、すべてのコントローラー情報にもアクセスできます。Rails モデルで ditry 属性を使用すると、何が変更されたかを正確に確認できます。
@user = User.find_by_login "bphogan"
@user.login = "Brian"
@user.save
@user.changed
=> ["login"]
@user.changes
=> {"login"=>["bphogan", "brian"]}
@user.login_was
=> "bphogan"
これをあなたが持っているセッション情報と組み合わせると、かなり素晴らしい監査人ができます.
それは役に立ちますか?