Đếm lượt view page bằng gem impressionist
This post hasn't been updated for 7 years
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
All Rights Reserved