public_activity is the best gem for easy activity tracking of models and easy to integrate in your rails application.
links: Github-doc, Demo
STEPS:
- In your gemfile:
gem 'public_activity'
- Generate migration for activities and migrate the database (in your Rails project):
rails g public_activity:migration rake db:migrate
- Include PublicActivity::Model and add tracked to the model you want to keep track of:
class Answer < ActiveRecord::Base include PublicActivity::Model tracked end
now, by default create/update/destroy activities are recorded in activities table.(basic CRUD actions)
- Displaying activities: (see more details)
controller:
def index @activities = PublicActivity::Activity.all end
views: public_activity looks for views in app/views/public_activity.
= render_activities(@activities)
CUSTOM ACTIVITIES:
You can trigger custom activities by setting all your required parameters and triggering create_activity on the tracked model, like this:
@answer.create_activity key: 'article.commented_on', owner: current_user
SET THE ACTIVITY'S OWNER TO current_user BY DEFAULT: (see more details)
class Answer < ActiveRecord::Base include PublicActivity::Model tracked only: [:create], owner: -> (controller, model) { model.user } end
DESTROY STALE ACTIVITIES:
If you are not tracking the destroy, do not forget to add callback to remove the activity associated to that activerecord.
before_destroy :remove_activity def remove_activity activity = PublicActivity::Activity.find_by_trackable_id(self.id) activity.destroy if activity.present? true end
CUSTOMIZE ACTIVITY MODEL:
If you want to add your own custom scopes, for example to display activities of current-user or friends activites
class Activity < PublicActivity::ORM::ActiveRecord::Activity def self.user_activities(user) where("activities.owner_id = ? AND owner_type = 'User'", user.id) end end