Peut ActiveScaffold être configuré pour afficher le formulaire de recherche avant d'afficher une liste?

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

Question

Quand je demande ActiveScaffold de me montrer une très longue liste (par exemple la liste des produits vendus), il exécute la requête de base de données pour obtenir la première page de données et l'affiche. Si la liste a quelques relations, cette requête peut prendre un certain temps pour exécuter (sur une seconde). La plupart du temps, je ne suis pas intéressé par cette liste « non filtrée »: la première chose que je veux faire est de cliquer sur « rechercher » et filtrer dans cette liste

.

Est-il possible que je pourrais dire ActiveScaffold pas pour afficher la liste non filtrée lorsque l'action de la liste est appelée? Je voudrais à afficher simplement le formulaire de recherche, attendez quelques critères à saisir, et seulement puis afficher la liste filtrée.

Était-ce utile?

La solution

I trouvé une solution en définissant la méthode conditions_for_collection dans le contrôleur. Il est un peu un hack, mais il est simple (3 lignes) et cela fonctionne:

def conditions_for_collection
  params[:action]=="update_table" ? "" : "1=2"
end

Voici comment ça se passe: quand vous demandez la liste, du contrôleur Liste méthode est appelé, géré par ActiveScaffold. appels ActiveScaffold conditions_for_collection , et puisque l'action est (pas update_table ), la méthode conditions_for_collection ci-dessus renvoie "1 = 2", ce qui bien sûr conduit à une liste vide.

L'utilisateur peut cliquer sur le bouton « Rechercher » et lancer une recherche. Ceci appelle la update_table l'action, encore une fois les appels ActiveScaffold conditions_for_collection , qui revient cette fois "" (sans filtre), de sorte que toute la liste est recherchée.

Il est pas vraiment beau, mais il fait le travail.

Autres conseils

Vous avez probablement besoin de passer outre l'action et de fournir votre #index propre modèle. Il ne semble pas qu'il y ait un moyen de lui dire de ne pas montrer cette liste.

Quelque chose comme ceci:

active_scaffold :models do |config|
    config.actions.exclude :index
end

Vous devrez ensuite mettre en œuvre votre propre méthode d'index qui a son propre modèle et ainsi de suite. Main de retour à l'action de recherche de Échafaudage active. Je ne sais pas comment tu ferais ça, mais si vous regardez la source HTML de la page originale vous revenez, il devrait être assez clair quelle action il est un lien vers qui fait la recherche.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top