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