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 .....