Pode ActiveScaffold ser configurado para mostrar o formulário de busca antes de exibir uma lista?
-
20-08-2019 - |
Pergunta
Quando pergunto ActiveScaffold para mim uma lista muito longa (por exemplo, a lista de produtos vendidos) mostram, que executa a consulta de banco de dados para obter a primeira página de dados e exibe-lo. Se a lista tem algumas relações, esta consulta pode levar algum tempo para executar (mais de um segundo). Na maioria das vezes, eu não estou interessado nesta lista "não filtrada":. A primeira coisa que eu quero fazer é clicar em "pesquisar" e filtro para baixo esta lista ??p>
Existe alguma maneira eu poderia dizer ActiveScaffold não para exibir a lista não filtrada quando a ação lista é chamada? Eu gostaria que ele simplesmente exibir o formulário de busca, aguarde alguns critérios para ser inserido, e só então exibir a lista filtrada.
Solução
I encontrada uma solução, definindo o conditions_for_collection método no controlador. É uma espécie de um truque, mas é simples (3 linhas) e ele funciona:
def conditions_for_collection
params[:action]=="update_table" ? "" : "1=2"
end
Este é como vai: quando você perguntar para a lista, a lista do controlador de método é chamado, manipulados por ActiveScaffold. chamadas ActiveScaffold conditions_for_collection , e uma vez que a ação é lista ??em> (não update_table ), o método conditions_for_collection acima retorna "1 = 2", que, naturalmente, leva a uma lista vazia.
O usuário pode clicar no botão "Pesquisar" e iniciar uma pesquisa. Isso chama o update_table ação, chamadas novamente ActiveScaffold conditions_for_collection , que desta vez retorna "" (sem filtro), de modo que toda a lista é pesquisado.
Não é realmente bonito, mas ele faz o trabalho.
Outras dicas
Você provavelmente precisará substituir a ação #index
e fornecer o seu próprio modelo. Não parece que há alguma maneira de dizer-lhe para não mostrar essa lista.
Algo parecido com isto:
active_scaffold :models do |config|
config.actions.exclude :index
end
Você vai ter que, em seguida, implementar seu próprio método de índice que tem seu próprio modelo e assim por diante. Entregar de volta à ação busca ativa de andaime. Eu não tenho certeza Como você faria isso, mas se você olhar para a fonte HTML da página original que você receber de volta deve ser bastante claro quais as medidas que está ligando para que faz a pesquisa.