Pode ActiveScaffold ser configurado para mostrar o formulário de busca antes de exibir uma lista?

StackOverflow https://stackoverflow.com/questions/489798

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

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.

Foi útil?

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 (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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top