我需要实施产品页面访问统计信息(按天)。如何在Rails中做到这一点?
答案 0 :(得分:1)
在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
唯一索引意味着每个产品每天有一个条目。如果该产品没有任何视图,则会有缺少的条目。这也意味着如果那是你的后端数据库,你可以使用MySQL的ON DUPLICATE KEY
功能。
您可以使用单个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轻松地报告此事。