Wenn Sie vollständige Phoenix
Unterstützung suchen, verwendet Rummage.Phoenix
Rummage.Ecto
und fügt HTML
und Controller
Unterstützung hinzu. Sie können Rummage.Phoenix
ausprobieren, indem Sie hier klicken
Versionsspezifische Änderungen finden Sie im CHANGELOG
Rummage.Ecto
ist ein leichtes, aber leistungsstarkes Framework, mit dem Ecto
-Abfragen mit Such-, Sortier- und Paginierungsvorgängen geändert werden können.
Die oben genannten Vorgänge werden mithilfe von Hooks
ausgeführt, bei denen es sich um Module handelt, die Rummage.Ecto.Hook
-Verhalten implementieren. Für jede Operation: Search
, Sort
und Paginate
sind ihre Hooks in Rummage
definiert. Dadurch ist Rummage
vollständig konfigurierbar.
Wenn Ihnen beispielsweise einer der Hooks von Rummage
nicht gefällt, Ihnen aber die anderen beiden gefallen, können Sie Rummage
so konfigurieren, dass er ihn nicht verwendet, und Ihren eigenen benutzerdefinierten Hook schreiben.
HINWEIS: Rummage
ist nicht wie Ransack
und soll auch nicht so sein wie Ransack
. Es definiert keine Funktionen basierend auf Suchparametern. Wenn Sie so etwas möchten, können Sie Rummage
jederzeit so konfigurieren, dass es Ihr Search
für dieses Modell verwendet. Aus diesem Grund wurde Rummage konfigurierbar gemacht.
Um ein Beispiel für die Verwendung von rummage
zu sehen, schauen Sie sich dieses Repository an.
Dieses Paket ist in Hex verfügbar und kann wie folgt installiert werden:
Fügen Sie rummage_ecto
zu Ihrer Abhängigkeitsliste in mix.exs
hinzu:
def deps do
[ { :rummage_ecto , "~> 2.0.0-rc.0" } ]
end
Rummage.Ecto.Hook
verwenden) und Rückrufe für Rummage.Ecto.Hook
-Verhalten implementieren. Jede Ecto-Operation, die die Abfrage transformieren kann, wird durch einen Hook
definiert. Hooks verfügen über die Funktion run/2
mit der sie eine Ecto.Queryable
-Variable transformieren können, und über die Funktion format_params/3
mit der sie Parameter transformieren können, die ihnen über rummage_ecto
übergeben werden HINWEIS: Dies ist optional. Wenn keine Konfiguration bereitgestellt wird, verwendet Rummage
Standard-Hooks und AppName.Repo
als Repo
Wenn Sie einen der Rummage
Standard-Hooks überschreiben möchten, fügen Sie rummage_ecto
Konfiguration zu Ihrer Konfigurationsliste in dev.exs
hinzu:
config :rummage_ecto ,
Rummage.Ecto ,
search: MyApp.SearchModule
Zum Konfigurieren eines Repos:
config :rummage_ecto ,
Rummage.Ecto ,
repo: MyApp.Repo # This can be overridden per model basis, if need be.
Weitere Konfigurationsoptionen sind: repo
, sort
, paginate
, per_page
Rummage.Ecto
kann global mit einem per_page
-Wert konfiguriert werden (der für ein Modell überschrieben werden kann). Wenn Sie für verschiedene Modelle unterschiedliche per_page
festlegen möchten, fügen Sie diese zur Datei model.exs
hinzu, während Sie Rummage.Ecto
verwenden, wie im Abschnitt „Erweiterte Verwendung“ gezeigt.
Rummage.Ecto
verfügt über viele leistungsstarke Funktionen, die sofort verfügbar sind, ohne dass viel Code geschrieben werden muss.
Im Folgenden finden Sie die Möglichkeiten, wie Rummage.Ecto
verwendet werden kann:
Repo
Ihrer App und die gewünschte per_page
(bei Verwendung von Rummages Paginierung) zur rummage_ecto
-Konfiguration in config.exs
hinzu: config :rummage_ecto , Rummage.Ecto ,
repo: MyApp.Repo ,
per_page: 10
Rummage.Ecto
mit jedem Ecto
-Modell verwenden können.Rummage
mit Ihrem benutzerdefinierten Hook überschreiben möchten, fügen Sie den CustomHook
Ihrer App mit der gewünschten Operation zur rummage_ecto
-Konfiguration in config.exs
hinzu: config :rummage_ecto , Rummage.Ecto ,
repo: MyApp.Repo ,
search: MyApp.SearchModule ,
paginate: MyApp.PaginateModule
Rummage.Ecto
mit einer App verwenden, die über mehrere Repo
verfügt, oder wenn Repo
pro Modell konfiguriert werden muss, kann dies zusammen mit dem Aufruf von Rummage.Ecto
übergeben werden. Dies überschreibt das in der Konfiguration festgelegte Standard-Repo: { queryable , rummage } = Product
|> Rummage.Ecto . rummage ( rummage , repo: MyApp.Repo2 )
Rummage.Ecto
mit Product
verwenden können, das sich in einem anderen Repo
als dem Standard-Repo befindet. rummage = % {
search: % { field_1 => % { search_type: :like , search_term: "field_!" } } ,
sort: % { field: :field1 , order: :asc } ,
paginate: % { per_page: 5 , page: 1 }
}
{ queryable , rummage } = Product
|> Rummage.Ecto . rummage ( rummage )
products = queryable
|> Product . another_operation # <-- Since `Rummage` is Ecto, we can pipe the result queryable into another queryable operation.
|> Repo . all
params
mit folgenden Schlüsseln: search
, sort
und/oder paginate
. Es müssen nicht alle Schlüssel oder überhaupt irgendwelche Schlüssel vorhanden sein. Wenn ungültige Schlüssel übergeben werden, ändern sie keine Vorgänge im Durchsuchen. Hier ist ein Beispiel für Rummage
-Parameter: rummage = % {
search: % { field_1 => % { search_type: :like , search_term: "field_!" } } ,
sort: % { field: :field1 , order: :asc } ,
paginate: % { per_page: 5 , page: 1 }
}