Đếm Lượt View Page Bằng Gem Impressionist - Viblo

Bạn muốn đếm số lượt view 1 trang, 1 sản phẩm, hay thậm chí đếm số lượt thực hiện 1 action nào đó. Bạn có thể thực hiện 1 cách thủ công bằng cách +1 vào 1 trường quy định số view trong db, nhưng như vậy thì việc config sẽ gặp nhiều rắc rối. Để việc đó trở nên dễ dàng hơn, tôi sẽ giớ thiệu cho bạn 1 gem khá hữu ích cho việc này: gem impressionist

1.Cài đặt

Thêm vào Gemfile

gem "impressionist"

Chạy lệnh Bundler

bundle install

Chạy lệnh generate

rails g impressionist

Chạy lệnh migration

rake db:migrate

thêm 1 cột trong bảng

rails g migration AddImpressionsCountToBook impressions_count:int 2.Cách dùng

1.Ghi log tất các actions trong controller

WidgetsController < ApplicationController impressionist end

2.Ghi log 1 action đặc biệt nào đó của controller

WidgetsController < ApplicationController impressionist actions: [:show,:index] end

3 Chắc chắn trong model của bạn đã được thêm

class Widget < ActiveRecord::Base is_impressionable end

Sau khi thêm xong, giờ bạn có thể ghi log bất kì object nào của model với hành động tùy ý

def show @widget = Widget.find impressionist(@widget, "message...") # 2nd argument is optional end

4 Lấy số lượng log đã ghi được

@widget.impressionist_count @widget.impressionist_count(start_date: "2011-01-01", end_date: "2011-01-05") @widget.impressionist_count(start_date: "2011-01-01") # end date = now @widget.impressionist_count(filter: :ip_address) #filter theo địa chỉ ip @widget.impressionist_count(filter: :params) #filter theo param đặc biệc nào đó @widget.impressionist_count(:ilter: :session_hash) #filter theo session đăng nhập của user

3. Nếu bạn muốn bản log được ghi lại không bị trùng lặp?

Những phần trên ghi log lại đều có thể bị trùng lặp, vậy nên bạn có thể sử dụng 1 số config sau để tránh trùng lặp

Chỉ ghi log với những request không trùng type, id, session impressionist unique: [:impressionable_type, :impressionable_id, :session_hash]

Chỉ ghi log với những request không trùng controller, action, và session impressionist unique: [:controller_name, :action_name, :session_hash]

Hoặc đơn giản hơn là chỉ ghi log theo từng phiên làm việc impressionist unique: [:session_hash]

Chỉ ghi log với những request không trùng param impressionist :unique => [:params]

Bài viết mang tính giới thiệu, có điều gì sai sót mong bạn đọc bỏ qua

Từ khóa » đếm View