0

ActiveRecord コールバックを使用して記録する現在のユーザー情報を追加しようとしていますが、その方法がわかりません。Thread.current[:user] を試してみましたが、結果としてスレッド値が別のユーザー セッションからアクセスされていることがわかります。私は本番環境で Passanger を使用していますが、同時にユーザー値を正しく取得する act_as_audited を使用しています。それを行うための最良/最も安全な方法は何ですか?

4

1 に答える 1

0

ActiveRecord モデル内から現在のユーザーにアクセスすることはできません。これは、Rails で関心が分離されているためです。現在のユーザーとセッションは、コントローラーの領域に関連する概念です。

コールバックを機能させるには、関連データを取得してモデルに渡す必要があります。これを行う 1 つの方法は、アクセサー メソッドを使用することです。

# model
attr_accessor :current_user

def my_callback
  # do something with current_user
  self.some_attribute = current_user
end

# controller
@model = MyModel.find(params[:id])
@model.current_user = current_user # assuming you have a controller method that does this
@model.save!

current_userアクセサーの名前を意味のある名前にする必要があります。ブログ投稿の作成者を追跡している場合は、モデルが保存されると何も意味しないため、それを呼び出すauthorか、またはresponsible_userそのようなものを呼び出します。current_user

于 2013-02-07T20:15:06.390 に答える