Как я могу отсортировать с помощью Ransack столбца, который содержит количество связанных моделей - PullRequest
0 голосов
/ 08 октября 2018

У меня есть две модели: InStock и Variant:

class InStock < ApplicationRecord
  has_many :variants
end

и:

class Variant < ApplicationRecord
  belongs_to :in_stock
end

На странице индекса in_stocks у меня есть таблица со столбцом:<%= in_stock.variants.count %> Я хочу использовать гем ransack для сортировки столбца.Для этого у меня есть этот код в контроллере:

def index
  @q = InStock.ransack(params[:q])
  @in_stocks = @q.result.includes(:variants)
end

и в представлении:

<th><%= sort_link(@q, :variants_count, t('admin.pages.in_stocks.variants'), default_order: :desc) %></th>

Но сортировка не работает.Это не дает мне никакой ошибки, просто ничего не происходит.Есть ли способ заставить Ransack работать с такими данными?Спасибо вперед.

1 Ответ

0 голосов
/ 09 октября 2018

Добавьте это к InStock class

ransacker :variants_count do
  query = '(SELECT COUNT(variants.in_stock_id) FROM variants where variants.in_stock_id = in_stocks.id GROUP BY variants.in_stock_id)'
  Arel.sql(query)
end
...