2013-09-03 3 views
3

Я пытался реализовать gem Impressionist, но поскольку документ запутан и камень несет накладные расходы для моего простого случая использования, я задаюсь вопросом, как я мог бы реализовать это сам?Создание простого счетчика попадания в Rails

  • Я хочу отслеживать показы (запросы) определенного действия в контроллере.

  • Впечатления не обязательно должны быть зарегистрированы уникальными посетителями.

  • Мне нужен счетчик, чтобы быть уникальным для каждой записи в модели (т. Е. Магазин 1: 34 хита, магазин 2: 77 хитов и т. Д.).

  • Счетчик не должен включать в себя запросы от ботов в этом списке: http://www.user-agents.org/allagents.xml

Что бы минимальный код, необходимый для выполнения выше?

Update

Чтобы уточнить, если это возможно, я не хочет использовать драгоценный камень импрессионистов. Я использовал это только как прелюдию, чтобы описать, какую проблему я пытаюсь решить.

+0

Вы хотите использовать импрессионистский камень или хотите самим реализовать драгоценный камень? – fotanus

ответ

1

Вам необходимо добавить атрибут к своей модели.

Если вы используете драгоценный камень Impressionsit, вы должны use the built-in migration generator, чтобы добавить вашу схему в Вашу базу данных.

В противном случае, если вы не планируете использовать этот драгоценный камень, вам нужно будет создать миграцию, как следующее:

MyMigration < ActiveRecord::Migration 
    def change 
    add_column :pluralized_model_eg_users, :integer, default: 0 
    end 
end 

Затем, на действия, которые вы хотите посчитать, используйте код:

unless request.env["HTTP_USER_AGENT"].match(/\(.*https?:\/\/.*\)/) 
    @model.update_attribute :impressions, @model + 1 
end 

Он не использует список, который вы указали, даже чтобы избежать накладных расходов. Однако most robots have an url in his user agent to identify then, поэтому использование этого должно быть безопасным.

Использование списка с этого сайта потребует от вас добавления кэширования в этот список, который может добавить в код код сложности, если он будет простой функцией.

 Смежные вопросы

  • Нет связанных вопросов^_^