Se você está procurando suporte completo Phoenix
, Rummage.Phoenix
usa Rummage.Ecto
e adiciona suporte HTML
e Controller
. Você pode conferir Rummage.Phoenix
clicando aqui
Consulte CHANGELOG para alterações específicas da versão
Rummage.Ecto
é uma estrutura leve, mas poderosa, que pode ser usada para alterar consultas Ecto
com operações de Pesquisa, Classificação e Paginação.
Ele realiza as operações acima usando Hooks
, que são módulos que implementam o comportamento Rummage.Ecto.Hook
. Cada operação: Search
, Sort
e Paginate
tem seus ganchos definidos no Rummage
. Ao fazer isso, Rummage
é totalmente configurável.
Por exemplo, se você não gosta de um dos ganchos do Rummage
, mas gosta dos outros dois, você pode configurar Rummage
para não usá-lo e escrever seu próprio gancho personalizado.
NOTA: Rummage
não é como Ransack
e não pretende ser como Ransack
. Não define funções com base em parâmetros de pesquisa. Se quiser algo assim, você sempre pode configurar Rummage
para usar seu módulo Search
para esse modelo. É por isso que o Rummage se tornou configurável.
Para ver um exemplo de uso de rummage
, verifique este repositório.
Este pacote está disponível em Hex e pode ser instalado como:
Adicione rummage_ecto
à sua lista de dependências em mix.exs
:
def deps do
[ { :rummage_ecto , "~> 2.0.0-rc.0" } ]
end
Rummage.Ecto.Hook
) e implementam retornos de chamada para o comportamento Rummage.Ecto.Hook
. Cada operação ecto que pode transformar a consulta é definida por um Hook
. Os ganchos têm a função run/2
com a qual podem transformar uma variável Ecto.Queryable
e têm a função format_params/3
com a qual podem transformar os parâmetros passados a eles através rummage_ecto
NOTA: Isto é opcional. Se nenhuma configuração for fornecida, Rummage
usará ganchos padrão e AppName.Repo
como repositório
Se você deseja substituir qualquer um dos ganchos padrão Rummage
, adicione rummage_ecto
config à sua lista de configurações em dev.exs
:
config :rummage_ecto ,
Rummage.Ecto ,
search: MyApp.SearchModule
Para configurar um repositório:
config :rummage_ecto ,
Rummage.Ecto ,
repo: MyApp.Repo # This can be overridden per model basis, if need be.
Outras opções de configuração são: repo
, sort
, paginate
, per_page
Rummage.Ecto
pode ser configurado globalmente com um valor per_page
(que pode ser substituído por um modelo). Se você deseja definir per_page
diferente para modelos diferentes, adicione-o ao arquivo model.exs
enquanto usa Rummage.Ecto
conforme mostrado na seção Uso avançado.
Rummage.Ecto
vem com muitos recursos poderosos que estão disponíveis imediatamente, sem escrever muito código.
Abaixo estão as maneiras como Rummage.Ecto
pode ser usado:
Repo
do seu aplicativo e o per_page
desejado (se estiver usando Paginação do Rummage) à configuração rummage_ecto
em config.exs
: config :rummage_ecto , Rummage.Ecto ,
repo: MyApp.Repo ,
per_page: 10
Rummage.Ecto
com qualquer modelo Ecto
.Rummage
pelo seu gancho personalizado, adicione o CustomHook
do seu aplicativo com a operação desejada à configuração rummage_ecto
em config.exs
: config :rummage_ecto , Rummage.Ecto ,
repo: MyApp.Repo ,
search: MyApp.SearchModule ,
paginate: MyApp.PaginateModule
Rummage.Ecto
com um aplicativo que possui vários Repo
s, ou quando há necessidade de configurar Repo
por modelo, ele pode ser repassado junto com a chamada para Rummage.Ecto
. Isso substitui o repositório padrão definido na configuração: { queryable , rummage } = Product
|> Rummage.Ecto . rummage ( rummage , repo: MyApp.Repo2 )
Rummage.Ecto
com modelo Product
que está em um Repo
diferente do padrão. 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
com as chaves: search
, sort
e/ou paginate
. Não é necessário ter todas as chaves ou nenhuma chave. Se chaves inválidas forem passadas, elas não alterarão nenhuma operação de busca. Aqui está um exemplo 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 }
}