从今天,昨天和本月开始计算,帝国宝石



我正在使用名为 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

最新更新