If you want to log the user who created, updates and delete a object in specific model.There is no default way to fetch the current user in models, current_user is always assigned in controllers (as per authentication plugins, restful_authentication, authlogic and devise).
Found one way, by adding some steps in model/user.rb, we can get the object anywhere(also it’s threadsafe)
Step 1
In your user model, add the following line
class User < ActiveRecord::Base
def self.current
Thread.current[:user]
end
def self.current=(user)
Thread.current[:user] = user
end
end
We have to add class methods to the User model,
Step 2
User.current to fetch the current user
User.current= to assign the current user.
So what we need to do is to assign the current user in User model every request we need a current user.
class ApplicationController < ActionController::Base
before_filter :set_current_user
def set_current_user
User.current = current_user
end
end
Now we can easily fetch the current_user in models/observers by User.current
class ActivityObserver < ActiveRecord::Observer
observe :post
def after_create(record)
## here im using background job sidekiq
InsertActivities.perform_async("#{User.current.id}")
end
end
Hope !!! you have got ur solution.
Deadly/perfect — thanks.
LikeLiked by 1 person
Thank you so much! This was incredibly helpful!
LikeLiked by 1 person