Gemfile:
gem 'public_activity'
bundle update
rails g public_activity:migration
rake db:migrate
app/models/item.rb
class Item < ActiveRecord::Base
include PublicActivity::Model
tracked owner: Proc.new{ |controller, model| controller.current_user }, recipient: Proc.new{ |controller, model| model.user }, params: { reason: 'TEST' }
〜
end
app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
include PublicActivity::StoreController
# ログインユーザ
def current_user
@current_user ||= User.where( id: session[:user_id] ).first
end
end
rails s
app/controllers/activities_controller.rb
class ActivitiesController < ApplicationController
# 一覧
def index
@activities = PublicActivity::Activity.where( recipient_id: current_user.id ).order( "created_at DESC" ).all
end
end
config/routes.rb
resources :activities
app/views/activities/index.html.erb
<% @activities.each do |activity| %>
<div class="activity"><%= render_activity activity %></div>
<% end %>
app/views/public_activity/item/_create.html.erb
<%= link_to activity.trackable.canva.name, activity.trackable.canva if activity.trackable %>:<%= link_to activity.trackable.board.name, activity.trackable.board if activity.trackable %> に<%= link_to( activity.owner.name, activity.owner ) if activity.owner %>さんが新しいカードを投稿しました。
rails c
> PublicActivity::Activity.all.tapp
----------
PublicActivity::ORM::ActiveRecord::Activity Load (0.3ms) SELECT "activities".* FROM "activities"
[
[7] #<PublicActivity::ORM::ActiveRecord::Activity:0x007fd81d2511e0> {
:id => 8,
:trackable_id => 57,
:trackable_type => "Item",
:owner_id => 3,
:owner_type => "User",
:key => "item.create",
:parameters => {
:reason => "TEST"
},
:recipient_id => 3,
:recipient_type => "User",
:created_at => Wed, 20 Mar 2013 18:16:16 JST +09:00,
:updated_at => Wed, 20 Mar 2013 18:16:16 JST +09:00
}
]
----------
app/models/item.rb
※メソッド名を「create_activity」にするとGem側のメソッド名と被り「wrong number of arguments (1 for 0)」エラーになる
after_create :generate_activity
# メンバー分アクティビティ生成
def generate_activity
members = Membership.where( canva_id: self.canva_id, status: "approval" ).all
members.each { |member|
self.create_activity( action: 'create', owner: self.user, recipient: member.user )
}
end