Mon application contient des photos et les utilisateurs peuvent rechercher des photos répondant à certains critères. Disons qu'un utilisateur cherche des photos par balise, et nous obtenons quelque chose comme ceci: maintenant, Donc, disons que l'utilisateur recherche quelque chose et que l'application trouve 5 enregistrements, sur le La seule autre contrainte est, si l'utilisateur navigue sur une photo directement (par une autre page ou un signet, etc.) il n'y aurait pas T être une photo logique "suivante" et "Précédente" car il n'y avait pas de requête qui les conduisit à cette photo, donc dans ce cas, le modèle ne devrait pas du tout rendre le contenu associé à la requête. P> Alors, je pensais à faire ce genre de chose et je n'ai pas vraiment de bonnes idées. Je suppose que je pouvais faire quelque chose comme stocker la requête en session pour pouvoir y retourner, mais je ne sais pas comment trouver les photos qui auraient montré à gauche et à droite de la photo sélectionnée. P > Quelqu'un a-t-il des exemples de comment faire ce genre de chose? p> p> @Results code> va être une requête Standard ActiveCord avec plusieurs enregistrements . Celles-ci seraient montrées dans une grille et un utilisateur peut ensuite cliquer sur une photo. Cela prendrait les utilisateurs à l'action
# Afficher code> action. P>
[1,2, 3,4,5] code> et l'utilisateur clique sur la photo n ° 3. P>
Photo # Afficher la page CODE> PAGE que j'aimerais pouvoir montrer un "Photo Suivant Photo", "Photo précédente", et "Retour à la recherche". P>
4 Réponses :
Vous pourriez jeter un oeil à ce qui est fait dans Actsasadjacent :
named_scope :previous, lambda { |i| {:conditions => ["#{self.table_name}.id < ?", i.id], :order => "#{self.table_name}.id DESC"} } named_scope :next, lambda { |i| {:conditions => ["#{self.table_name}.id > ?", i.id], :order => "#{self.table_name}.id ASC"} }
Alors, après beaucoup d'essais et d'erreurs, voici ce que j'ai proposé:
dans mon modèle photo: p> Cette méthode renvoie l'enregistrement suivant et précédent à partir d'une recherche ou d'une vue de dossier particulière en acceptant une matrice de ces identifiants d'enregistrements. Je génère cet identifiant dans n'importe quelle vue du contrôleur qui crée une vue de requête (c'est-à-dire la page de recherche et la page de dossiers de dossiers): p> Donc, par exemple, mon contrôleur de recherche contient: P> - if @prev_photo || @next_photo
#navigation
.header Related Photos
.prev
= link_to image_tag( @prev_photo.file.url :tenth ), collection_photo_path(@collection, @prev_photo) if @prev_photo
- if @prev_photo
%span Previous
.next
= link_to image_tag( @next_photo.file.url :tenth ), collection_photo_path(@collection, @next_photo) if @next_photo
- if @next_photo
%span Next
Vous pouvez résoudre votre gotcha i> en mettant l'identifiant de la requête persistée dans l'URL pour les liens suivants / précédents et les liens de la page de recherche. De cette façon, si vous voyez l'identifiant et qu'il correspond à la dernière requête persistée, affichez les boutons suivants / précédents. Si l'identifiant n'est pas là parce que l'utilisateur a tapé de l'URL ou est arrivé à la page une autre manière, n'exprimez pas les boutons.
@Brian: oooh! C'est une idée fraîche, je vais travailler à la mise en œuvre de quelque chose comme ça!
Merci beaucoup pour avoir posté cela, c'est vraiment utile.
Que faites-vous si vous ithétiez sur le nombre de photos données qui sont limitées par @ Search.Page (paramètres [: page]). Per (20)?
Être honnête qui n'a pas été un problème. Le but du prochain / précédent dans mon application est essentiellement de voir les enregistrements adjacents à proximité répondant à un critère donné, mais il n'y en a pas généralement beaucoup. Il serait logique de simplement inverser l'ordre de l'affectation, cependant: stocker la carte photo de la recherche en session, puis le paginer.
Andrew, votre méthode n'est pas universelle et ne donnez pas le résultat droit garanti. Il y a une meilleure façon de le faire.
Dans votre modèle: et sous vues: p>
Cela fait pas i> faire ce que j'essayais de faire. Je ne veux pas seulement la photo suivante, je souhaite la prochaine photo des utilisateurs spécifiques Résultats récents de recherche. Je suis sûr que ma méthode n'est pas parfaite et j'ai énuméré mon plus grand "gotcha" connu avec elle, mais cela fonctionne au besoin dans mon application.
Ça n'a pas fait ce qu'il voulait, mais c'était parfait pour moi :)
Pour moi, utiliser des rails 4 cela ne fonctionne pas assez correctement. Votre "prochain" donne moi le "dernier" et "Précédent" Donnez-moi le premier.
Je n'ai rien à voir avec les rails 4, ce code devrait le faire. Remplacer premier code> avec
Dernier code> et vice versa, et vous devez obtenir le résultat souhaité.
Un bijou que j'ai écrit appelé Nexter le fait-il pour vous.
Vous le transmettez une combinaison AR d'étendue (AKA activeLation) plus l'objet / record actuel et Nexter Inspectez la clause de commande pour créer le SQL qui récupérera les enregistrements avant / antérieurs et après / suivant. P>
essentiellement, il examine l'article_values de l'ordre (A, B, C) et sort avec: p> ce n'est que le gist de celui-ci. Cela fonctionne également avec les valeurs d'association et est intelligente avec la recherche des valeurs inverse pour la partie précédente. Pour conserver l'état de votre recherche (ou une combinaison de portée), vous pouvez utiliser une autre lib libelle comme Siphon , ransack, has_scope etc ... p> voici un exemple de travail à partir du fichier README P> Le modèle: p> le contrôleur p> La vue: p>
Dupliqué possible de rails: " Suivant post "et" post précédent "Liens dans ma vision de mon spectacle, comment?