2010-07-26 5 views
3

J'ai une page de recherche qui trouve des candidats. À partir de cette page, vous pouvez cliquer sur afficher pour obtenir plus d'informations sur le candidat. Lorsque vous êtes sur la vue candidate, vous pouvez cliquer sur modifier ou effectuer un certain nombre d'autres actions qui vous renverront également la vue des candidats.Rails - stocker requête de recherche/résultat

Mon problème est des candidats voir que je dois ajouter un bouton pour revenir aux résultats de la recherche. J'ai d'abord pensé à utiliser un bouton JS avec l'historique -1 mais comme l'utilisateur peut effectuer d'autres actions depuis l'intérieur de la vue, cela ne fonctionnera pas. Je suis encore tout à fait nouveau sur les rails donc je ne suis pas sûr de mes options ... Je pense à une sorte de mise en cache des résultats et peut-être un champ caché pour garder une trace de l'emplacement de la cache (ne pense pas c'est

Merci, Alex

+0

Merci à tous pour votre aide !Je vais essayer chacune de ces solutions. – Alex

Répondre

10

Je probablement utiliser une variable de session pour stocker ces informations.

d'abord, assurez-vous que votre forme des messages à la page de recherche est une opération GET, de cette façon les détails de recherche sont dans votre chaîne de requête. Ensuite, dans votre action de recherche, vous pouvez saisir l'URL de la requête et le stocker dans la session:

session[:search_results] = request.url 

Maintenant, à votre avis pour les résultats, vous pouvez faire votre « Retour aux résultats de recherche » comme ceci:

link_to "Back to search results", session[:search_results] 
+0

Je préfère cela, il a un seul inconvénient: Il ne permettra pas plusieurs sessions de recherche ... – hurikhan77

+1

BTW: Je préfère "session [: last_query] = params" comme un filtre après. Il peut également enregistrer les demandes de publication alors. Assurez-vous de ne pas le faire lors de la redirection, ne stockez les paramètres que lorsque votre contrôleur va afficher les résultats. – hurikhan77

2

la meilleure solution que le suivi de la valeur cachée pourrait obtenir ABIT désordre!) Vous pouvez inclure les paramètres de la requête sur la sous-page. Ex .: affiche le résultat de la recherche. Chaque résultat a alors un lien comme /foo/:id?q=stuff. Et sur la sous-page, vous aurez le paramètre disponible pour renvoyer à la page principale.

Cette solution n'utilise pas état côté serveur, qui est généralement accepté comme une meilleure façon de créer des applications web. Non seulement cela signifie-t-il que votre navigateur se comportera comme prévu, en ce qui concerne les signets, les onglets multiples, etc., mais il garantit également que la mise en cache appropriée peut être utilisée. En outre, il réduit la complexité de votre application, ce qui facilite le débogage et l'extension.

1

Vous pouvez mettre les résultats de la recherche dans un tableau « search_results » calée par l'ID utilisateur. Ensuite, lorsque l'utilisateur atteint la page, chargez toujours à partir d'une requête sur cette table.

2

Vous avez deux options:

Cache les résultats, comme vous l'avez dit. Les inconvénients potentiels sont que cela prend de la mémoire, et si de nouveaux enregistrements valides sont ajoutés, vous ne les verrez pas. Vous pouvez stocker le cache dans Session ou dans la base de données (bien que dans ce dernier cas, vous ne gagniez pas beaucoup).

Je suggère simplement se rappeler le dernier terme de recherche, que ce soit en session ou en utilisant des champs cachés. Vous finissez par réexécuter la requête lorsque vous accédez à la page de résultats de recherche, mais dans une base de données correctement indexée, cela ne devrait pas être un gros problème.

Bonne chance!

+2

Non, n'essayez pas de mettre en cache le résultat dans la session. Vraiment. Ne pas! – hurikhan77

0

Si quelqu'un ne vient sur cette page et vous avez besoin d'un bouton qui va revenir à la page précédente et toujours afficher les résultats de recherche (tout comme le bouton google chrome), il suffit d'utiliser: retour .....

<%= link_to(image_tag("back.svg"), :back, :class => 'back_btn') %> 
Questions connexes