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