[RUBY-ON-RAILS] 레일에서 페이지 뷰에 대한 간단한 횟수 카운터
RUBY-ON-RAILS레일에서 페이지 뷰에 대한 간단한 횟수 카운터
이 게시물에서 예를 들어 railstat이 문제에 대한 몇 가지 솔루션을 발견했습니다 :
레일의 페이지 뷰
나는 고유 한 IP에 의해 필터링 된 횟수 카운터를 원하는 기사 및 리뷰의 무리가 있습니다. 정확히 유래는이 게시물의 경우와 같은. 하지만 난 정말 이미 나를 위해이 일을하고 많은 코드를 포함, 고유의 IP를 추적 등을 유지하고 분석 구글 railstat와 같은 솔루션을 상관 없어 .. 내 현재의 생각은 의복 또는 다른 웹 로그 분석을 사용하는 것입니다 그들이 어떤 테이블을 갱신 12시간 말보다 오래된, 그러나 나는 또한 cache_column 필요한 경우 페이지 통계를 끌어 플러그인.
난 당신이 특정 페이지에 대한 웹 로그 분석에서 통계를 뽑을 수 있으리라 믿고있어 그들은 12 시간마다 자신의 통계를 업데이트하는 것이?
나는이 것에있는 이유는 나쁜 생각이 있는지 궁금하거나, 누군가가 더 나은 솔루션이있는 경우거야?
감사
해결법
-
==============================
1.최신 정보
최신 정보
이 답변의 코드는 http://github.com/charlotte-ruby/impressionist의 기초로 사용되었다 그것을 밖으로 시도
아마이 앱에 당신에게 코드에 시간이 덜 걸릴 것 그것은 자신의 API를 사용하여 웹 로그 분석에서 데이터를 당길 것. 이 데이터는 가장 가능성이 더 정확한 것 당신은 또한 실시간 대신에 웹 로그 분석 데이터를 12 시간 대기에 통계있을 것입니다 .. 한는 외부 의존성 의존 할 필요가 없다. request.remote_ip 꽤 잘 작동합니다. 여기 다형을 이용한 용액이다. 이 코드는 안된 있습니다,하지만 가까이 있어야하시기 바랍니다.
페이지 뷰 (노출)을 저장하는 새로운 모델 / 마이그레이션을 만들기 :
class Impressions < ActiveRecord::Base belongs_to :impressionable, :polymorphic=>true end class CreateImpressionsTable < ActiveRecord::Migration def self.up create_table :impressions, :force => true do |t| t.string :impressionable_type t.integer :impressionable_id t.integer :user_id t.string :ip_address t.timestamps end end def self.down drop_table :impressions end end
협회에 대한 귀하의 제 모델에 한 줄을 추가 인상의 수를 반환하는 방법을 추가 :
class Article < ActiveRecord::Base has_many :impressions, :as=>:impressionable def impression_count impressions.size end def unique_impression_count # impressions.group(:ip_address).size gives => {'127.0.0.1'=>9, '0.0.0.0'=>1} # so getting keys from the hash and calculating the number of keys impressions.group(:ip_address).size.keys.length #TESTED end end
show 액션에 articles_controller에 대한 before_filter 만들기 :
before_filter :log_impression, :only=> [:show] def log_impression @article = Article.find(params[:id]) # this assumes you have a current_user method in your authentication system @article.impressions.create(ip_address: request.remote_ip,user_id:current_user.id) end
그럼 당신은 당신의보기에서 unique_impression_count 전화
<%=@article.unique_impression_count %>
당신이 모델의 무리에이를 사용하는 경우, 당신은 그것을 건조 할 수 있습니다. 같은 application_controller 사용 뭔가 동적으로는 def before_filter을 넣어 :
impressionable_class = controller_name.gsub("Controller","").constantize impressionable_instance = impressionable_class.find(params[:id]) impressionable_instance.impressions.create(ip_address:request.remote_ip,user_id:current_user.id)
또한 액티브에 포함됩니다 모듈 :: 자료로 제 모델에서 코드를 이동합니다. 당신은에 포함 보내기를 넣을 수있는 설정 / 초기화 ... 또는 당신은 미친하려는 경우 다른 응용 프로그램에 재사용 할 수 있도록, 그냥 레일 엔진에 모든 일을 켭니다.
module Impressionable def is_impressionable has_many :impressions, :as=>:impressionable include InstanceMethods end module InstanceMethods def impression_count impressions.size end def unique_impression_count impressions.group(:ip_address).size end end end ActiveRecord::Base.extend Impressionable
from https://stackoverflow.com/questions/4815713/simple-hit-counter-for-page-views-in-rails by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 루비에 밑줄 경우에 카멜 케이스로 변환 (0) | 2020.02.13 |
---|---|
[RUBY-ON-RAILS] 유증 사용자를위한 모델 프로필? (0) | 2020.02.13 |
[RUBY-ON-RAILS] 루비와 SOAP를 사용하는 가장 좋은 방법은 무엇입니까? (0) | 2020.02.12 |
[RUBY-ON-RAILS] 4 개 이미지 Heroku가에로드되지 레일 (0) | 2020.02.12 |
[RUBY-ON-RAILS] 자바에 대한 마이그레이션 (0) | 2020.02.12 |