Si está buscando soporte completo Phoenix
, Rummage.Phoenix
usa Rummage.Ecto
y le agrega soporte HTML
y Controller
. Puedes consultar Rummage.Phoenix
haciendo clic aquí
Consulte CHANGELOG para conocer los cambios específicos de la versión.
Rummage.Ecto
es un marco liviano pero poderoso que se puede utilizar para modificar consultas Ecto
con operaciones de búsqueda, clasificación y paginación.
Realiza las operaciones anteriores mediante el uso Hooks
, que son módulos que implementan el comportamiento Rummage.Ecto.Hook
. Cada operación: Search
, Sort
y Paginate
tiene sus ganchos definidos en Rummage
. Al hacer esto, Rummage
es completamente configurable.
Por ejemplo, si no te gusta uno de los ganchos de Rummage
, pero te gustan los otros dos, puedes configurar Rummage
para que no lo use y escribir tu propio gancho personalizado.
NOTA: Rummage
no es como Ransack
y no pretende ser como Ransack
. No define funciones basadas en parámetros de búsqueda. Si desea tener algo así, siempre puede configurar Rummage
para usar su módulo Search
para ese modelo. Es por eso que Rummage se ha hecho configurable.
Para ver un ejemplo de uso de rummage
, consulte este repositorio.
Este paquete está disponible en Hex y se puede instalar como:
Agregue rummage_ecto
a su lista de dependencias en mix.exs
:
def deps do
[ { :rummage_ecto , "~> 2.0.0-rc.0" } ]
end
Rummage.Ecto.Hook
) e implementan devoluciones de llamada para el comportamiento Rummage.Ecto.Hook
. Cada operación ecto que puede transformar la consulta está definida por un Hook
. Los ganchos tienen la función run/2
mediante la cual pueden transformar una variable Ecto.Queryable
y tienen la función format_params/3
mediante la cual pueden transformar los parámetros que se les pasan a través de rummage_ecto
NOTA: Esto es opcional. Si no se proporciona ninguna configuración, Rummage
utilizará enlaces predeterminados y AppName.Repo
como repositorio.
Si desea anular cualquiera de los enlaces predeterminados Rummage
, agregue la configuración rummage_ecto
a su lista de configuraciones en dev.exs
:
config :rummage_ecto ,
Rummage.Ecto ,
search: MyApp.SearchModule
Para configurar un repositorio:
config :rummage_ecto ,
Rummage.Ecto ,
repo: MyApp.Repo # This can be overridden per model basis, if need be.
Otras opciones de configuración son: repo
, sort
, paginate
, per_page
Rummage.Ecto
se puede configurar globalmente con un valor per_page
(que se puede anular para un modelo). Si desea configurar diferentes per_page
para diferentes modelos, agréguelo al archivo model.exs
mientras usa Rummage.Ecto
como se muestra en la Sección de uso avanzado.
Rummage.Ecto
viene con muchas funciones poderosas que están disponibles de inmediato, sin escribir mucho código.
A continuación se detallan las formas en que se puede utilizar Rummage.Ecto
:
Repo
de su aplicación y el per_page
deseado (si usa la paginación de Rummage) a la configuración rummage_ecto
en config.exs
: config :rummage_ecto , Rummage.Ecto ,
repo: MyApp.Repo ,
per_page: 10
Rummage.Ecto
con cualquier modelo Ecto
.Rummage
con su enlace personalizado, agregue el CustomHook
de su aplicación con la operación deseada a la configuración rummage_ecto
en config.exs
: config :rummage_ecto , Rummage.Ecto ,
repo: MyApp.Repo ,
search: MyApp.SearchModule ,
paginate: MyApp.PaginateModule
Rummage.Ecto
con una aplicación que tiene múltiples Repo
s, o cuando es necesario configurar Repo
según el modelo, se puede pasar junto con la llamada a Rummage.Ecto
. Esto anula el repositorio predeterminado establecido en la configuración: { queryable , rummage } = Product
|> Rummage.Ecto . rummage ( rummage , repo: MyApp.Repo2 )
Rummage.Ecto
con el modelo Product
que se encuentra en un Repo
diferente al predeterminado. 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
con claves: search
, sort
y/o paginate
. No es necesario tener todas las claves, ni ninguna clave. Si se pasan claves no válidas, no alterarán ninguna operación en la búsqueda. Aquí hay un ejemplo de parámetros Rummage
: rummage = % {
search: % { field_1 => % { search_type: :like , search_term: "field_!" } } ,
sort: % { field: :field1 , order: :asc } ,
paginate: % { per_page: 5 , page: 1 }
}