В моем приложении я пытаюсь сортировать элементы по видам за последние 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.
Любые предложения по устранению этой проблемы?
«joins» будет исключать записи, не имеющие отношения, вместо этого используйте 'include (: impressions)'. См. Здесь: http://hiteshrawal.blogspot.ca/2011/12/rails-include-vs-joins.html, он говорит: «': joins' - На самом деле это делает «INNER JOIN», который фильтрует строки, которые не имеют ассоциации ». & "': includes' будет делать "LEFT OUTER JOIN", который показывает всю запись из таблицы. " – MrYoshiji