4

データへの変更を監査するために紙の証跡を使用しており、paper_trailがデフォルトで保存する「whodunnit」列に加えて、現在のユーザーのuser_idを保存したいと思います。

バージョン移行を変更してuser_id列を追加することに問題はありませんでした。しかし、アプリのさまざまなモデルからその列を設定する簡単な方法がわかりませんでした。

これはうまくいくようです:

has_paper_trail :meta => { :user_id  => current_user.id
                       }

そして、モデルのcurrent_userにアクセスできれば、うまくいくかもしれないと思います。しかし、私はしません。私のモデルでcurrent_userにアクセスする方法を調査した後、ここで哲学的な議論があることがわかりました。それは私の質問ではありません。

したがって、sentient_userやsentient_modelなどのgemを使用して、モデル内のcurrent_userにアクセスできるようにし、上記のコードのようなもので設定できるようにすることを考えています。

ただし、これらのgemを追加することは、私がここでやろうとしている小さなことには複雑に思えます。もっと簡単な方法があるのだろうかと思います。

アクションを実行した人のuser_idをバージョンテーブルに追加する最も簡単な方法は何ですか?

4

1 に答える 1

3

current_userモデル自体には存在せず、コントローラーから表示されます。したがって、標準的なアプローチが適用可能です。

class ApplicationController < ActionController::Base
  def user_for_paper_trail
    current_user if user_signed_in?
  end

  def info_for_paper_trail
    { user_id: current_user.id } if user_signed_in?
  end
end

# config/initializers/paper_trail.rb
class Version < ActiveRecord::Base
  attr_accessible :user_id
end
于 2012-07-31T07:01:13.677 に答える