Быстрый и грязный способ создать что-то подобное в Rails - создать таблицу отслеживания:
create_table :product_views do |t|
t.integer :product_id, :null => false
t.date :viewed_at, :null => false
t.integer :views, :null => false, :default => 1
end
add_index :product_views, [ :product_id, :viewed_at ], :unique => true
add_index :product_views, :viewed_at
Уникальный индекс будет означать, что у вас есть одна запись на продукт в день.Там будет отсутствовать записи в течение нескольких дней без просмотра этого продукта.Это также означает, что вы можете использовать функцию ON DUPLICATE KEY
MySQL, если это ваша внутренняя база данных.
Вы можете заполнить это с помощью одного вызова SQL:
class Product
def self.record_view!(product_id)
connection.execute(
sanitize_sql([
"INSERT INTO product_views (product_id, viewed_at)
VALUES (?, CURRENT_DATE())
ON DUPLICATE KEY UPDATE views=views+1",
product_id
])
)
end
def record_view!
self.class.record_view!(self.id)
end
end
Это можно вызватьв любое время и добавит 1 к вашей таблице счетчиков.Вы можете легко сообщить об этом, используя стандартный SQL.