Si vous recherchez une prise en charge complète Phoenix
, Rummage.Phoenix
utilise Rummage.Ecto
et y ajoute la prise en charge HTML
et Controller
. Vous pouvez consulter Rummage.Phoenix
en cliquant ici
Veuillez vous référer au CHANGELOG pour les modifications spécifiques à la version.
Rummage.Ecto
est un framework léger mais puissant qui peut être utilisé pour modifier les requêtes Ecto
avec des opérations de recherche, de tri et de pagination.
Il accomplit les opérations ci-dessus en utilisant Hooks
, qui sont des modules qui implémentent le comportement Rummage.Ecto.Hook
. Chaque opération : Search
, Sort
et Paginate
ont leurs hooks définis dans Rummage
. En faisant cela, Rummage
est entièrement configurable.
Par exemple, si vous n'aimez pas l'un des hooks de Rummage
, mais que vous aimez les deux autres, vous pouvez configurer Rummage
pour ne pas l'utiliser et écrire votre propre hook personnalisé.
REMARQUE : Rummage
n'est pas comme Ransack
, et il n'a pas l'intention d'être comme Ransack
. Il ne définit pas de fonctions basées sur des paramètres de recherche. Si vous souhaitez avoir quelque chose comme ça, vous pouvez toujours configurer Rummage
pour utiliser votre module Search
pour ce modèle. C'est pourquoi Rummage a été rendu configurable.
Pour voir un exemple d'utilisation de rummage
, consultez ce référentiel.
Ce package est disponible en Hex et peut être installé comme :
Ajoutez rummage_ecto
à votre liste de dépendances dans mix.exs
:
def deps do
[ { :rummage_ecto , "~> 2.0.0-rc.0" } ]
end
Rummage.Ecto.Hook
) et implémentent des rappels pour le comportement Rummage.Ecto.Hook
. Chaque opération ecto pouvant transformer la requête est définie par un Hook
. Les hooks ont la fonction run/2
grâce à laquelle ils peuvent transformer une variable Ecto.Queryable
et ont la fonction format_params/3
grâce à laquelle ils peuvent transformer les paramètres qui leur sont transmis via rummage_ecto
REMARQUE : Ceci est facultatif. Si aucune configuration n'est fournie, Rummage
utilisera les hooks par défaut et AppName.Repo
comme dépôt
Si vous souhaitez remplacer l'un des hooks par défaut Rummage
, ajoutez la configuration rummage_ecto
à votre liste de configurations dans dev.exs
:
config :rummage_ecto ,
Rummage.Ecto ,
search: MyApp.SearchModule
Pour configurer un dépôt :
config :rummage_ecto ,
Rummage.Ecto ,
repo: MyApp.Repo # This can be overridden per model basis, if need be.
Les autres options de configuration sont : repo
, sort
, paginate
, per_page
Rummage.Ecto
peut être configuré globalement avec une valeur per_page
(qui peut être remplacée pour un modèle). Si vous souhaitez définir différents per_page
pour différents modèles, ajoutez-le au fichier model.exs
tout en utilisant Rummage.Ecto
comme indiqué dans la section Utilisation avancée.
Rummage.Ecto
est livré avec de nombreuses fonctionnalités puissantes qui sont disponibles immédiatement, sans écrire beaucoup de code.
Vous trouverez ci-dessous les façons dont Rummage.Ecto
peut être utilisé :
Repo
de votre application et le per_page
souhaité (si vous utilisez Rummage's Pagination) à la configuration rummage_ecto
dans config.exs
: config :rummage_ecto , Rummage.Ecto ,
repo: MyApp.Repo ,
per_page: 10
Rummage.Ecto
avec n’importe quel modèle Ecto
.Rummage
par votre hook personnalisé, ajoutez le CustomHook
de votre application avec l'opération souhaitée à la configuration rummage_ecto
dans config.exs
: config :rummage_ecto , Rummage.Ecto ,
repo: MyApp.Repo ,
search: MyApp.SearchModule ,
paginate: MyApp.PaginateModule
Rummage.Ecto
avec une application qui possède plusieurs Repo
, ou lorsqu'il est nécessaire de configurer Repo
par modèle, il peut être transmis avec l'appel à Rummage.Ecto
. Cela remplace le dépôt par défaut défini dans la configuration : { queryable , rummage } = Product
|> Rummage.Ecto . rummage ( rummage , repo: MyApp.Repo2 )
Rummage.Ecto
avec le modèle Product
qui se trouve dans un Repo
différent de celui par défaut. 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
avec des clés : search
, sort
et/ou paginate
. Il n’est pas nécessaire qu’il ait toutes les clés, ni aucune clé d’ailleurs. Si des clés invalides sont transmises, elles ne modifieront aucune opération de fouille. Voici un exemple de paramètres Rummage
: rummage = % {
search: % { field_1 => % { search_type: :like , search_term: "field_!" } } ,
sort: % { field: :field1 , order: :asc } ,
paginate: % { per_page: 5 , page: 1 }
}