#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 }