Неверный порядок сортировки подсчета Ransack

Я использую Ransack Gem и выполняю сортировку по счетчику через кеш-счетчик. Мой атрибут является целым числом.

Я вызываю это так:

<%= sort_link(@q, :people_count, "PEOPLE") %>

Результат сортировки, который я получаю:

[ЛЮДИ ASC]

1
2
0
0

[СООБЩЕНИЕ ЛЮДЕЙ]

0
0
2
1

Я хочу, чтобы PEOPLE DESC показывал:

2
1
0
0

Кто-нибудь может помочь?

---ОБНОВЛЕНИЕ-----

После более чем часа поисков я чувствую, что приближаюсь:

Сначала мне пришлось отредактировать свое представление:

От

<%= mycontact.people.count %>

to

<%= mycontact.people_count %>

Это изменило все нули на ноль.

Теперь мой вывод сортировки:

[СООБЩЕНИЕ ЛЮДЕЙ]

ноль
ноль
2
1

Затем я еще немного покопался и нашел ссылку на эту проблему на github, которая объясняет, что вы должны добавить NULLS LAST.

Поэтому я добавил следующий код в peoples_controller.rb:

@q.result.except(:order).order("#{@q.sorts.first.attr_name} #{@q.sorts.first.dir} NULLS LAST")

Сначала я был взволнован, потому что это сработало, но затем после перезапуска моего сервера я получаю следующую ошибку:

неопределенный метод `attr_name' для nil:NilClass


person Gary Riger    schedule 26.01.2015    source источник
comment
Гэри, введи много операторов печати, чтобы выяснить, что это за объект, который получает ноль. Не стесняйтесь вставлять множество операторов print в Gems и читать там исходный код. Помогает тонны!   -  person justingordon    schedule 26.01.2015
comment
github.com/activerecord-hackery/ransack/issues/443 возможно, это может быть полезным   -  person Jan Strnádek    schedule 25.01.2017


Ответы (1)


Я не знаком с драгоценным камнем Ранзака; тем не менее, я могу в конечном итоге использовать его сейчас, когда увидел, на что он способен.

Попробуй это:

<%= sort_link(@q, :people_count, "PEOPLE", default_order: :desc) if :people_count > 0 %>

Что-то в этом роде должно дать вам следующий вывод для [PEOPLE DESC]:

2

1

Затем вы можете сделать что-то вроде этого:

<%= sort_link(@q, :people_count, "PEOPLE", default_order: :desc) where :people_count = 0 %>

Чтобы показать результаты со счетом 0.

Имеет ли эта логика смысл?

person Andrew Hendrie    schedule 07.02.2015