У меня есть модель сайта с уведомлением об отношениях.На сайте есть несколько уведомлений каждый день.Я пытаюсь подсчитать сумму уведомлений за несколько дней и хочу отсортировать сайты по этой сумме.
class Site
has_many :notifications
scope :sort_by_notifications_between_dates_asc, -> (start_date, end_date) { left_joins(:notifications).merge(Notification.between_dates(start_date, end_date)).order(Arel.sql("count(notifications.*) asc")) }
scope :sort_by_notifications_between_dates_desc, -> (start_date, end_date) { left_joins(:notifications).merge(Notification.between_dates(start_date, end_date)).order(Arel.sql("count(notifications.*) desc")) }
end
class Notification
belongs_to :site
scope :between_dates, -> (start_date, end_date) {where(self.arel_table[:created_at].gteq(start_date.at_beginning_of_day).and(self.arel_table[:created_at].lteq(end_date.at_end_of_day)))}
end
Для Ransack возможно создать область для сортировки, но я не нашел способачтобы передать аргументы (start_date и end_date) в эту область.
= sort_link(@q, :notifications_between_dates, t('.notifications_between_dates'), default_order: :desc)
Мне не нужно фильтровать сайты по дате.Мне нужно отсортировать сайты по сумме уведомлений за период времени.Это вообще возможно?