20
18

More than 5 years have passed since last update.

アクティビティ/フィード実装 - public_activity

Last updated at Posted at 2013-03-20

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
20
18
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
18