Как посчитать ежедневные показы для объекта, связанного с current_user с помощью импрессиониста - PullRequest
0 голосов
/ 28 мая 2018

У меня проблемы с получением суммы всех показов для конкретного объекта, относящегося к пользователю, в течение 24 часов.По сути, я хочу посчитать ежедневные показы для сообщений current_user.

Я пробовал шесть или семь разных подходов, но ни один не работает.Мой последний - ниже.

 def posts_daily_impressions_count(current_user)
  current_user.posts.sum(&:impressionist_count).group_by_day(:created_at)
 end

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Вы можете решить эту проблему, отслеживая только сообщения, созданные в течение дня / месяца / года.

Создайте области для сообщений

  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)}

Примените их перед методом сумм

<%= current_user.posts.today.sum(&:impressionist_count) %>

Это даст вам впечатления, созданные за тот промежуток времени, на котором вы сосредоточены.

0 голосов
/ 28 мая 2018
posts_daily_impressions_count = Post.joins(:User).where('users.id = ? AND posts.created_at between ? and ?', current_user.id,Date.today.beginning_of_day, Date.today.end_of_day).select('sum(posts.impressionist_count) as total_impressions').group('posts.created_at')]

Это будет выглядеть как массив так: -

=> [#<Post:0x007f8ba416f300 id: nil>,
 #<Post:0x007f8ba416f170 id: nil>,
 #<Post:0x007f8ba416ef90 id: nil>,
 #<Post:0x007f8ba416ee00 id: nil>,
 #<Post:0x007f8ba416ec70 id: nil>,
 #<Post:0x007f8ba416eae0 id: nil>,
 #<Post:0x007f8ba416e950 id: nil>]

, и вы можете вызывать имя столбца псевдонима для каждого отдельного элемента результатов массива следующим образом: -

posts_daily_impressions_count[0].total_impressions
=> 8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...