Фильтр ActiveAdmin: атрибут has_many: through - PullRequest
1 голос
/ 20 февраля 2020

Я хочу отфильтровать таблицу ActiveAdmin по атрибуту модели, который связан через отношение has_many: foo through:: bar.

Например, если книга

has_many :borrowers, through: :book_checkouts

... как добавить параметр фильтрации на странице ActiveAdmin для книг, чтобы пользователь мог фильтровать идентификатор заемщика? (В виде строки; в нашей библиотеке столько заемщиков, что использование Select здесь неудобно.)

1 Ответ

1 голос
/ 21 февраля 2020

Фон

На странице ActiveAdmin вы можете добавить фильтры следующим образом:

filter :column_name_1
filter :column_name_2

Таким образом, вы создадите новый оператор фильтра для borrowers, но по умолчанию, это создаст выбор.

filter :borrowers

Решение

Итак, чтобы сказать, что вы не хотите использовать выбор, вам нужно изменить символ, который вы даете ему, с тем, какой столбец в ассоциация, которую вы хотите отфильтровать. Поэтому, если вы хотите фильтровать по идентификатору заемщиков, вы сделаете следующее:

# You specify as: :numeric to so ActiveAdmin knows to add 
# filtering options for numbers. So when it renders on the page,
# for the filter option it will display three options to filter by:
# ID equals, is greater than, or is less than

filter :borrowers_id, as: :numeric

Если вы хотите отфильтровать по другому столбцу, который является строкой, например, name, вы Я сделаю следующее:

filter :borrowers_name, as: :string

Примечание : Я также заметил, что если вы не укажете as: :type, тогда ActiveAdmin не распознает фильтр и не отобразит что-нибудь для этого.

При ответе на вопрос: Active Admin - фильтр по наличию ассоциации has_many

...