Um plugin de administração para adicionar um filtro personalizado à sua página de índice. O filtro será renderizado como um componente fora da tela, portanto não ocupará muito espaço na sua página de índice. Altamente inspirado no filtro do ActiveAdmin.
Vamos concordar que a equipe de Administração fez um ótimo trabalho com a funcionalidade padrão de pesquisa ou filtro. Ele já oferece suporte a vários campos de pesquisa e pesquisas em tabelas relacionais. É fácil de personalizar (como ativar/desativar a pesquisa, definir campos de pesquisa personalizados, etc.).
Mas existem algumas desvantagens que descobri:
registration_status
e employment_status
e quiser pesquisar apenas o status de registro "ativo", você obterá todos os registros "ativos", incluindo o status de emprego.Por favor, compartilhe suas idéias se tiver outros motivos.
Adicione administrate_filterable
ao seu Gemfile:
gem 'administrate_filterable'
E então execute:
$ bundle install
Ou simplesmente execute:
$ bundle add administrate_filterable
Para cada recurso ao qual você deseja adicionar um filtro personalizado, adicione a linha a seguir ao controlador Administrar, respectivamente.
include AdministrateFilterable :: Filterer
Exemplo:
class UsersController < Administrate :: ApplicationController
include AdministrateFilterable :: Filterer
# ...
end
Por padrão, todos os atributos de COLLECTION_ATTRIBUTES
serão renderizados como campos de filtro. Você pode substituir isso adicionando FILTER_ATTRIBUTES
ao arquivo do painel do seu administrador.
Exemplo ( app/dashboards/user_dashboard.rb
):
class UserDashboard < Administrate :: BaseDashboard
# ..
FILTER_ATTRIBUTES = [
:first_name ,
:last_name ,
:email ,
:created_at
] . freeze
# ..
end
É possível personalizar o modelo de filtro (por exemplo, alterar o ícone do botão de filtro, etc). Você pode fazer isso substituindo o modelo padrão em seu aplicativo, basta criar um novo arquivo chamado _index_filter.html.erb
na pasta de recursos desejada.
Por exemplo, se quiser substituir o modelo de filtro para o recurso users
, você precisará criar o arquivo em app/views/admin/users/_index_filter.html.erb
. Em seguida, basta copiar e colar o conteúdo do modelo padrão aqui e modificá-lo para atender às suas necessidades.
Se você usar um pipeline de ativos, precisará incluir os ativos desta gem em seu arquivo app/assets/config/manifest.js
:
// ... other code here ...
//= link administrate_filterable/application.css
//= link administrate_filterable/application.js
Execute rails assets:precompile
se os ativos não estiverem carregados.
Por padrão, esta gem adicionará um botão de filtro a views/admin/application/_search.html.erb
parcial. Mas se você substituiu esse parcial em seu aplicativo, você pode adicionar o botão manualmente adicionando a seguinte linha:
<%= render 'index_filter' %>
Exemplo ( app/views/admin/users/_search.html.erb
):
< form class =" search " role =" search " >
... other code here ...
</ form >
<%= render 'index_filter' %>
scoped_resource
substituído Esta gem utiliza o método scoped_resource
para filtrar os recursos, substituindo seu comportamento padrão. Se por acaso você também substituir esse método no controlador do aplicativo, também substituirá a funcionalidade do filtro e não funcionará.
Para corrigir isso, você precisa adicionar o seguinte código na última linha do seu método scoped_resource
substituído:
filtered_resources ( your_scoped_resource )
Por exemplo:
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
Como eu uso o parcial _search.html.erb
para adicionar o botão de filtro, ele pode não ser exibido se você transformar todos os atributos pesquisáveis em falsos no painel do modelo. Portanto, certifique-se de ter pelo menos um atributo pesquisável para que o botão de filtro apareça.
A razão pela qual uso o parcial é porque:
_index_header.html.erb
, mas ele entra em conflito com o botão de exportação de administrate_exportable. Usar ambas as gemas resulta na falta de um botão, devido à substituição parcial. Ainda há muitas coisas a fazer para tornar esta joia melhor. Aqui estão alguns deles (classificados primeiro pela prioridade mais alta):
belongs_to
, etc) prompt
, adicionar opção include_blank
, etc.) scoped_resource
) scoped_resource
substituído) Se você tiver alguma ideia ou sugestão, informe-me criando um problema ou solicitação pull.
Você pode me ajudar a melhorar esta joia contribuindo para este projeto. Qualquer ajuda é muito apreciada.
bundle exec rspec
Licença MIT
Muito obrigado pelos seguintes recursos que me ajudaram muito na criação desta joia: