Ein Verwaltungs-Plugin zum Hinzufügen eines benutzerdefinierten Filters zu Ihrer Indexseite. Der Filter wird als Off-Canvas-Komponente gerendert, sodass er nicht zu viel Platz auf Ihrer Indexseite einnimmt. Stark inspiriert vom Filter von ActiveAdmin.
Wir sind uns einig, dass das Team der Verwaltung mit der standardmäßigen Such- oder Filterfunktion hervorragende Arbeit geleistet hat. Es unterstützt bereits mehrere Suchfelder und relationale Tabellensuchen. Es lässt sich leicht anpassen (z. B. die Suche aktivieren/deaktivieren, benutzerdefinierte Suchfelder definieren usw.).
Es gibt jedoch einige Nachteile, die ich festgestellt habe:
registration_status
und employment_status
verfügen und nur nach dem „aktiven“ Registrierungsstatus suchen möchten, erhalten Sie alle „aktiven“ Datensätze, einschließlich des Beschäftigungsstatus.Bitte teilen Sie uns Ihre Gedanken mit, wenn Sie andere Gründe haben.
Fügen Sie administrate_filterable
zu Ihrer Gemfile hinzu:
gem 'administrate_filterable'
Und dann ausführen:
$ bundle install
Oder führen Sie einfach Folgendes aus:
$ bundle add administrate_filterable
Fügen Sie für jede Ressource, der Sie einen benutzerdefinierten Filter hinzufügen möchten, die folgende Zeile zu ihrem jeweiligen Administrate-Controller hinzu.
include AdministrateFilterable :: Filterer
Beispiel:
class UsersController < Administrate :: ApplicationController
include AdministrateFilterable :: Filterer
# ...
end
Standardmäßig werden alle Attribute aus COLLECTION_ATTRIBUTES
als Filterfelder gerendert. Sie können dies überschreiben, indem Sie FILTER_ATTRIBUTES
zur Dashboard-Datei Ihres Administrators hinzufügen.
Beispiel ( app/dashboards/user_dashboard.rb
):
class UserDashboard < Administrate :: BaseDashboard
# ..
FILTER_ATTRIBUTES = [
:first_name ,
:last_name ,
:email ,
:created_at
] . freeze
# ..
end
Es ist möglich, die Filtervorlage anzupassen (z. B. das Symbol der Filterschaltfläche usw. zu ändern). Sie können dies tun, indem Sie die Standardvorlage in Ihrer Anwendung überschreiben. Erstellen Sie einfach eine neue Datei mit dem Namen _index_filter.html.erb
in Ihrem gewünschten Ressourcenordner.
Wenn Sie beispielsweise die Filtervorlage für die users
überschreiben möchten, müssen Sie die Datei in app/views/admin/users/_index_filter.html.erb
erstellen. Dann kopieren Sie einfach den Inhalt aus der Standardvorlage, fügen Sie ihn hier ein und passen Sie ihn an Ihre Bedürfnisse an.
Wenn Sie eine Assets-Pipeline verwenden, müssen Sie die Assets dieses Gems in Ihre Datei app/assets/config/manifest.js
aufnehmen:
// ... other code here ...
//= link administrate_filterable/application.css
//= link administrate_filterable/application.js
Führen Sie rails assets:precompile
aus, wenn die Assets nicht geladen sind.
Standardmäßig fügt dieses Gem teilweise eine Filterschaltfläche zu views/admin/application/_search.html.erb
hinzu. Wenn Sie diesen Teil jedoch in Ihrer Anwendung überschrieben haben, können Sie die Schaltfläche manuell hinzufügen, indem Sie die folgende Zeile hinzufügen:
<%= render 'index_filter' %>
Beispiel ( app/views/admin/users/_search.html.erb
):
< form class =" search " role =" search " >
... other code here ...
</ form >
<%= render 'index_filter' %>
scoped_resource
-Methode überschrieben Dieses Gem verwendet die Methode scoped_resource
um die Ressourcen zu filtern, indem es sein Standardverhalten überschreibt. Wenn Sie diese Methode zufällig auch in Ihrem Anwendungscontroller überschreiben, überschreiben Sie auch die Filterfunktionalität und es wird nicht funktionieren.
Um dies zu beheben, müssen Sie in der letzten Zeile Ihrer überschriebenen scoped_resource
-Methode den folgenden Code hinzufügen:
filtered_resources ( your_scoped_resource )
Zum Beispiel:
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
Da ich den Teil _search.html.erb
verwende, um die Filterschaltfläche hinzuzufügen, wird sie möglicherweise nicht angezeigt, wenn Sie im Modell-Dashboard alle durchsuchbaren Attribute auf „false“ setzen. Stellen Sie daher sicher, dass Sie über mindestens ein durchsuchbares Attribut verfügen, damit die Filterschaltfläche angezeigt wird.
Der Grund, warum ich den Teil verwende, ist folgender:
_index_header.html.erb
verwendet, aber er steht im Konflikt mit der Exportschaltfläche von administrate_exportable. Die Verwendung beider Edelsteine führt aufgrund der teilweisen Überschreibung dazu, dass eine Schaltfläche fehlt. Es gibt noch viel zu tun, um dieses Juwel zu verbessern. Hier sind einige davon (sortiert nach höchster Priorität zuerst):
belongs_to
usw.) prompt
hinzufügen, include_blank
Option hinzufügen usw.) scoped_resource
). scoped_resource
). Wenn Sie Ideen oder Vorschläge haben, teilen Sie mir dies bitte mit, indem Sie ein Issue oder eine Pull-Anfrage erstellen.
Sie können mir helfen, dieses Juwel zu verbessern, indem Sie zu diesem Projekt beitragen. Jede Hilfe wird sehr geschätzt.
bundle exec rspec
MIT-Lizenz
Vielen Dank für die folgenden Ressourcen, die mir bei der Erstellung dieses Juwels sehr geholfen haben: