我正在使用名为 impressionist
的 gem 来记录显示操作的页面浏览量。
每个想法都很棒。我可以通过以下方式获得所有网页浏览量:
@advertisement.impression_count
但是现在我希望能够过滤今天,昨天和本月的浏览量。
到目前为止,我想出了这个解决方案。
@today = Impression.where( :conditions => { :created_at => Date.today...Date.today+1 }, :impresionable_id =>@advertisement.id)
没有错误。
然后查看:
<%= "#{@today} views so far!" %>
给我#<Impression::ActiveRecord_Relation:0x000000068d46f8>
然后我尝试添加这样的:<%= "#{@today.impression_count} views so far!" %>
给了我这个:
undefined method `impression_count'
然后我只尝试了:<%= "#{@today.count} views so far!" %>
,但仍然错误:
Mysql2::Error: Unknown column 'conditions.created_at' in 'where clause': SELECT COUNT(*) FROM `impressions` WHERE (`conditions`.`created_at` >= '2014-12-18' AND `conditions`.`created_at` < '2014-12-19') AND `impressions`.`impresionable_id` = 127
有什么想法吗?
提前感谢!
@today = Impression.where( :conditions => { :created_at => Date.today...Date.today+1 }, :impresionable_id =>@advertisement.id)
返回一个#<Impression::ActiveRecord_Relation:0x000000068d46f8>
。
试试这个:
@today = Impression.where(created_at: Date.today...Date.today+1, impresionable_id: @advertisement.id).count
在impression.rb中添加范围
scope :today, -> {where("created_at >= ? AND created_at < ?", Time.now.beginning_of_day, Time.now.end_of_day)}
scope :yesterday, -> {where("created_at >= ? AND created_at < ?", 1.day.ago.beginning_of_day, 1.day.ago.end_of_day)}
scope :this_month, -> {where("created_at >= ? AND created_at < ?", Time.now.beginning_of_month, Time.now.end_of_month)}
在控制器中:
@today = Impression.today.where(impresionable_id: @advertisement.id)
@yesterday = Impression.yesterday.where(impresionable_id: @advertisement.id)
@this_month = Impression.this_month.where(impresionable_id: @advertisement.id)
您可以在任何需要按今天、昨天或本月的日期过滤Impressions
的地方使用这些范围。这比到处写where
子句要好。
不需要条件哈希。
today = Date.today
range = today..today.next_day
@imp = Impression.where(created_at: range, impressionable_id: @advertisement.id)
如果@advertisement
可以有印象,那么以下情况会更好:
@imp = @advertisement.impressions.where(created_at: range)
然后,要获得计数,您必须:
@today = @imp.count
此外,仅供参考,您可能需要使用 DateTime.now
而不是 Date.today
,因为您正在与日期时间字段(即 created_at(进行比较。
我容易
在广告中.rb
has_many :impressions, :as=>:impressionable
def view_count_yesterday
impressions.where("created_at >= ? AND created_at < ?", 1.day.ago.beginning_of_day, 1.day.ago.end_of_day).size
end
def view_count_today
impressions.where("created_at >= ? AND created_at < ?", Time.now.beginning_of_day, Time.now.end_of_day).size
# impressionist_count(:start_date => 1.day.ago)
end