Плагин администрирования для добавления пользовательского фильтра на вашу индексную страницу. Фильтр будет отображаться как компонент за пределами холста, поэтому он не будет занимать слишком много места на вашей индексной странице. Очень вдохновлен фильтром ActiveAdmin.
Согласитесь, команда Администратора отлично поработала над стандартным функционалом поиска или фильтрации. Он уже поддерживает несколько полей поиска и поиск по реляционным таблицам. Его легко настроить (например, включить/отключить поиск, определить пользовательские поля поиска и т. д.).
Но есть некоторые недостатки, которые я обнаружил:
registration_status
и employment_status
и вы хотите выполнить поиск только по «активному» статусу регистрации, вы получите все «активные» записи, включая статус занятости.Пожалуйста, поделитесь своими мыслями, если у вас есть другие причины.
Добавьте administrate_filterable
в ваш Gemfile:
gem 'administrate_filterable'
И затем выполните:
$ bundle install
Или просто запустите:
$ bundle add administrate_filterable
Для каждого ресурса, к которому вы хотите добавить собственный фильтр, добавьте следующую строку в его контроллер администрирования соответственно.
include AdministrateFilterable :: Filterer
Пример:
class UsersController < Administrate :: ApplicationController
include AdministrateFilterable :: Filterer
# ...
end
По умолчанию все атрибуты из COLLECTION_ATTRIBUTES
будут отображаться как поля фильтра. Вы можете обойти это, добавив FILTER_ATTRIBUTES
в файл панели администратора.
Пример ( app/dashboards/user_dashboard.rb
):
class UserDashboard < Administrate :: BaseDashboard
# ..
FILTER_ATTRIBUTES = [
:first_name ,
:last_name ,
:email ,
:created_at
] . freeze
# ..
end
Можно настроить шаблон фильтра (например, изменить значок кнопки фильтра и т. д.). Вы можете сделать это, переопределив шаблон по умолчанию в своем приложении, просто создайте новый файл с именем _index_filter.html.erb
в нужной папке ресурсов.
Например, если вы хотите переопределить шаблон фильтра для ресурса users
, вам необходимо создать файл в app/views/admin/users/_index_filter.html.erb
. Затем просто скопируйте сюда содержимое шаблона по умолчанию и измените его в соответствии со своими потребностями.
Если вы используете конвейер ресурсов, вам необходимо включить ресурсы этого драгоценного камня в файл app/assets/config/manifest.js
:
// ... other code here ...
//= link administrate_filterable/application.css
//= link administrate_filterable/application.js
Запустите rails assets:precompile
если ресурсы не загружены.
По умолчанию этот драгоценный камень добавит кнопку фильтра в views/admin/application/_search.html.erb
. Но если вы переопределили этот фрагмент в своем приложении, вы можете добавить кнопку вручную, добавив следующую строку:
<%= render 'index_filter' %>
Пример ( app/views/admin/users/_search.html.erb
):
< form class =" search " role =" search " >
... other code here ...
</ form >
<%= render 'index_filter' %>
scoped_resource
Этот драгоценный камень использует scoped_resource
для фильтрации ресурсов, переопределяя его поведение по умолчанию. Если вы случайно также переопределите этот метод в своем контроллере приложения, вы также переопределите функциональность фильтра, и он не будет работать.
Чтобы это исправить, вам нужно добавить следующий код в последнюю строку переопределенного scoped_resource
:
filtered_resources ( your_scoped_resource )
Например:
def scoped_resource
# Your custom filter logic here
resources = super . where ( status : 'active' )
# Add this line to make the filter work
filtered_resources ( resources )
end
Поскольку я использую партиал _search.html.erb
для добавления кнопки фильтра, она может не отображаться, если вы установите для всех атрибутов поиска значение false на панели управления модели. Поэтому убедитесь, что у вас есть хотя бы один атрибут, доступный для поиска, чтобы кнопка фильтра отображалась.
Причина, по которой я использую частичный вариант, заключается в том, что:
_index_header.html.erb
, но он конфликтует с кнопкой экспорта из administrate_exportable. Использование обоих драгоценных камней приводит к отсутствию одной кнопки из-за частичного переопределения. Еще многое предстоит сделать, чтобы сделать этот драгоценный камень лучше. Вот некоторые из них (отсортированы по наивысшему приоритету):
belongs_to
и т. д.). prompt
, добавьте параметр include_blank
и т. д.). scoped_resource
) scoped_resource
). Если у вас есть какие-либо идеи или предложения, дайте мне знать, создав проблему или запрос на включение.
Вы можете помочь мне улучшить этот драгоценный камень, внеся свой вклад в этот проект. Любая помощь высоко ценится.
bundle exec rspec
Лицензия MIT
Огромное спасибо за следующие ресурсы, которые очень помогли мне в создании этого драгоценного камня: