Activeadmin: Коллекция не работает с фильтром

#ruby-on-rails #filter #activeadmin

Вопрос:

Я работаю над фильтрами activeadmin. У меня есть один фильтр, который не работает. Фильтр:

 filter :role, as: :select, collection: Common::User::ROLES
 

Коллекция с областью действия:

 def scoped_collection
  Common::User.where(role: Common::User::ROLES)
end
 

Роли указаны в файле user.rb:

 ROLES = [ ADMIN, CUSTOMER, SYSTEM, LEAD]
 

Но при использовании этого фильтра я получаю следующую ошибку:

 ActionView::Template::Error (undefined method `klass' for nil:NilClass):
    1: insert_tag renderer_for(:index)
 

У кого-нибудь есть идеи, почему этот фильтр не работает?

РЕДАКТИРОВАТЬ: Я заметил, что фильтр выбора с параметром равно не работает, и тот же фильтр с другими параметрами, такими как contains, starts_with, ends_with, работает.

Комментарии:

1. Является ли роль также ассоциацией с пользователем?

2. Да, это ассоциация.

Ответ №1:

Фильтр, похоже, ожидает отношения ActiveRecord, поскольку это ассоциация.

Возможно, вы можете использовать код, который у вас есть в коллекции scoped_collection, в фильтре, а затем избавиться от коллекции scoped_collection?

 filter :role, as: :select, collection: Common::User.where(role: Common::User::ROLES)
 

Комментарии:

1. Я получаю ту же ошибку после внесения предложенных изменений.

Ответ №2:

Очень поздно, но вы пробовали передать это как процесс?

 filter :role, as: :select, collection: proc { Common::User::ROLES }