12/08/2018, 15:06

notification and activity

I.Activity Thêm gem** 'public_activity'** sau đó bundle Tiếp tục tạo model nhé + rails g public_activity:migration + rake db:migrate Xem trong db vừa tạo gồm những trường gì class CreateActivities < ActiveRecord::Migration def self.up create_table :activities do |t| ...

I.Activity

Thêm gem** 'public_activity'** sau đó bundle Tiếp tục tạo model nhé

+ rails g public_activity:migration
+ rake db:migrate

Xem trong db vừa tạo gồm những trường gì class CreateActivities < ActiveRecord::Migration

  def self.up
    create_table :activities do |t|
      t.belongs_to :trackable, :polymorphic => true
      t.belongs_to :owner, :polymorphic => true
      t.string  :key
      t.text    :parameters
      t.belongs_to :recipient, :polymorphic => true
      t.boolean :read, default: false # trường này mình thêm vào
      t.boolean :enable, default: true # trường này mình thêm vào
      t.integer :activity_type, default: 0 # trường này mình thêm vào
      t.references :user # trường này mình thêm vào để tạo quan hệ với bảng user
      t.timestamps
    end

    add_index :activities, [:trackable_id, :trackable_type]
    add_index :activities, [:owner_id, :owner_type]
    add_index :activities, [:recipient_id, :recipient_type]
  end
  # Drop table
  def self.down
    drop_table :activities
  end
end

Nếu bạn muốn thêm 1 số trường thì đơn giản chỉ tạo 1 model mới rồi kế thừa nó

class Activity < PublicActivity::Activity

  belongs_to :user
end

Bây giờ các bạn có thể gọi Activity.new xem nó có những trường nào nhé

Activity.new
#<Activity id: nil, trackable_type: nil, trackable_id: nil, owner_type: nil, owner_id: nil, key: nil, parameters: {}, recipient_type: nil,
    recipient_id: nil, read: false, enable: true, activity_type: "active", user_id: nil, created_at: nil, updated_at: nil>

Trước tiên muốn sử dụng được thì các bạn làm như sau:

  • include "include PublicActivity::Model" vào ApplicationRecord
class ApplicationRecord < ActiveRecord::Base
  self.abstract_class = true

  include PublicActivity::Model
end
  • Sau đó gọi "tracked" vào model nào bạn muốn luôn tất cả hành động của nó
class User < ApplicationRecord
    tracked
end

Như vậy là xong, ngoài ra bạn có thể override lại nó

II.Notification

Tiếp tục nhé, mình tạo 1 model Notification cũng kế thừa PublicActivity::Activity

class Notification < PublicActivity::Activity
    scope :all_notify, ->{where activity_type: 1} # mình thêm scope này để lọc theo Notification
end

Cũng như trên, đơn giản .....             </div>
            
            <div class=

0