2010-10-21 6 views
0

J'essaie de configurer mes routes pour le plugin will paginate donc je n'ai pas? Page = 1 à la fin de l'URL, et donc je peux essayer plus tard d'utiliser la mise en cache des pages.Ruby on Rails va paginer les routes

J'ai navigué en ligne et j'ai trouvé quelques tutoriels expliquant comment utiliser map.connect, mais j'ai du mal à le faire fonctionner avec mon application.

Voici un exemple d'URL: http://localhost:3000/profile/1/browse?page=1

Voici le code routes et j'ai jusqu'à présent:

map.connect '/profile/:id/browse/:page', 
:controller => 'profiles', 
:action => 'browse', 
:id => /\d+/, 
:page => /\d+/ 

Cela ne fonctionne pas. Quelqu'un a-t-il des conseils? Je pensais que map.connect correspondait à un modèle, mais il me manque peut-être quelque chose.

Merci,

Répondre

0

En regardant votre route, vous pourriez être le croisement de deux choses différentes. Qu'est-ce que vous paginez? S'il s'agit de profils, il n'est pas nécessaire de fournir un identifiant. Supposons que vous essayez de paginer des profils. Votre itinéraire ressemblerait à ceci:

map.connect '/profiles/browse/:page', 
    :controller => 'profiles', 
    :action => 'index', 
    :page => /\d+/ 

Et votre action de contrôleur ressemblerait à ceci:

def index 
    @profiles = Profile.paginate :page => params[:page] 
end 

Si vous essayez quelque chose de nid dans les profils, disent parcourant les photos d'un profil, vous aurez besoin de le faire plus comme ceci:

map.connect '/profiles/:id/browse/:page', 
    :controller => 'profiles', 
    :action => 'index', 
    :id => /\d+/, 
    :page => /\d+/ 

avec votre contrôleur comme ceci:

def index 
    @profile = Profile.find(params[:id]) 
    @pictures = @profile.pictures.paginate :page => params[:page] 
end 

Faites-moi savoir si cela fonctionne.

MISE À JOUR:

Vous avez énuméré dans les commentaires que /profile/1/ fait référence propre profil de l'utilisateur. D'abord, c'est dangereux parce que vous ne voulez pas que les gens changent quel profil l'application pense qu'ils sont, juste en changeant ce numéro d'identification à la main. Faites confiance à la méthode current_user que votre authentification vous donne.

Cependant, en utilisant votre configuration actuelle comme l'exemple, voici ce qu'elle ressemblerait à ceci:

map.connect '/profiles/:id/browse/:page', 
    :controller => 'profiles', 
    :action => 'browse', 
    :id => /\d+/, 
    :page => /\d+/ 

avec votre contrôleur comme ceci:

def browse 
    @profile = Profile.find(params[:id]) 
    @profiles = Profile.paginate :page => params[:page] 
end 

Laissez-moi savoir si vous avez encore des questions .

MISE À JOUR 2

Afin d'obtenir une belle link_to avec cela, changer la route vers une route nommée:

Maintenant, vous pouvez appeler link_to comme ceci:

link_to profile_browse_path(:id => 1, :page => 10) 
+0

Hey, browse est un membre de la ressource de profils. Vous ne savez pas si cela change quelque chose? – Brian

+0

Ainsi, lorsqu'un utilisateur est connecté au profil/1 représente l'utilisateur. profile/1/browse signifie simplement que l'utilisateur est dans la section de navigation – Brian

+0

Qu'est-ce qu'ils consultent, qui doit être paginé? –