0
在我的應用程序中,我試圖在最近10天內按視圖對項目進行排序。我使用的印象派創業板,創建一個名爲印象的模型,並在這裏記錄每一個視圖。ActiveRecord條件計數
我已經成功地得到了這片代碼:
@items = Item.joins("left join impressions on impressions.impressionable_id = items.id and impressions.impressionable_type = 'Item'")
.select("count(distinct(ip_address)) as counter, impressionable_id, items.title, items.id, items.image")
.group('items.id')
.order("counter desc")
.page(params[:page])
.per_page(9)
這個排序按總獨到的見解的項目。不過,我只想計算過去10天內的展示次數。這使我增加一個where
方法,例如:
time_range = (Time.now - 10.days)..Time.now
@items = Item.joins("left join impressions on impressions.impressionable_id = items.id and impressions.impressionable_type = 'Item'")
.select("count(distinct(ip_address)) as counter, impressionable_id, items.title, items.id, items.image")
.where('impressions.created_at' => time_range)
.group('items.id')
.order("counter desc")
.page(params[:page])
.per_page(9)
然而,這排除了沒有意見,這不是我想要的物品。這些應該用0視圖表示。
任何建議如何解決這個問題?
'連接'將消除沒有關係的記錄,而是使用'includes(:impressions)'。看到這裏:http://hiteshrawal.blogspot.ca/2011/12/rails-include-vs-joins.html,它說:「':連接」 - 它實際上做一個'INNER JOIN',它過濾行沒有關聯。「 &「':includes'它將執行'LEFT OUTER JOIN',它顯示錶中的所有記錄。」 – MrYoshiji