Smart url

Bonjour,

j’utilise ce snippet pour construire des url toto.com/fredix au lieu de
toto.com/user/view/id :
http://snippets.dzone.com/posts/show/536

Il marche très bien sauf pour la paginate qui est pété :
toto.com/application/handle_unrecog?page=2
Si quelqu’un a une idée.

Le 14/06/07, Frédéric Logier a écrit :

En fait j’utilisais render_component ce qui me permettait de rendre
user/view/id dans /fredix. Le prob c’est que le paginator utilise l’url
du
controlleur courant pour générer les siennes, d’ou le prob, car la route
renvoit sur le Application. Le mix c’est d’utiliser redirect_to, donc
toto.com/fredix renvoit sur toto.com/user/view/id, une demie pretty url

qui marche faute de mieux.

fredix :

user/view/id dans /fredix. Le prob c’est que le paginator utilise l’url du
controlleur courant pour générer les siennes,

Hein ? Quoi ?

Donc on a une action ‘view’ qui utilise la pagination (bon, soit).

envoie uniquement le bout de code de la vue view.rhtml
concernant la pagination.

d’ou le prob, car la route renvoit sur le Application. Le mix c’est
d’utiliser redirect_to, donc toto.com/fredix renvoit sur
toto.com/user/view/id, une demie pretty url …
qui marche faute de mieux.

– Jean-François.


À la renverse.

fredix :

concernant la pagination.

Je vois pas trop ton explication

Je veux dire, envoie sur la liste, seulement la partie pertinente
qui m’intéresse, c’est-à-dire le bout de code de la vue view.rhtml
concernant la pagination.

– Jean-François.


À la renverse.

Le 14/06/07, Jean-François a écrit :

Donc on a une action ‘view’ qui utilise la pagination (bon, soit).

envoie uniquement le bout de code de la vue view.rhtml
concernant la pagination.

Je vois pas trop ton explication

Le 15/06/07, Jean-François a écrit :

Je veux dire, envoie sur la liste, seulement la partie pertinente
qui m’intéresse, c’est-à -dire le bout de code de la vue view.rhtml
concernant la pagination.

<% if not @message_pages.nil? and @message_pages.length != 1 %>
Page <%= pagination_links(@message_pages) %>
<% end %>

fredix :

Je veux dire, envoie sur la liste, seulement la partie pertinente
qui m’intéresse, c’est-à-dire le bout de code de la vue view.rhtml
concernant la pagination.

<% if not @message_pages.nil? and @message_pages.length != 1 %>
Page <%= pagination_links(@message_pages) %>
<% end %>

Donc tu utilises le helper pagination_links.

si on regarde son code :

def pagination_links(paginator, options={}, html_options={})
name = options[:name] || DEFAULT_OPTIONS[:name]
params = (options[:params] || DEFAULT_OPTIONS[:params]).clone

pagination_links_each(paginator, options) do |n|
params[name] = n
link_to(n.to_s, params, html_options)
end
end

C’est le link_to dans le helper qui génére des liens avec
le contrôleur et l’action courants. Le paginateur n’a rien
a voir là dedans.

Donc soit on lui passe les paramètres au helper, soit on
le réécrit :

pagination_links(@message_pages,
:params => { :controller => ‘users’, :action => ‘view’ } )

ou :

(avec une route nommée ‘user_view’ )

def user_pagination_links(paginator, options={}, html_options={})
name = options[:name] ||
ActionView::Helpers::PaginationHelper::DEFAULT_OPTIONS[:name]
params = hash_for_user_view_url

pagination_links_each(paginator, options) do |n|
params[name] = n
link_to(n.to_s, params, html_options)
end
end

(Code garanti 100% non
testé)
si tu préfères que ça génère des /fredix?page=4, ben tu
utilises une autre route nommée.

– Jean-François.


À la renverse.

Le 15/06/07, Jean-François a écrit :

pagination_links(@message_pages,
:params => { :controller => ‘users’, :action => ‘view’ } )

En effet il suffit de passer les bons params au pagination_links …
merci !

Le 14/06/07, Frédéric Logier a écrit :

Bonjour,

j’utilise ce snippet pour construire des url toto.com/fredix au lieu de
toto.com/user/view/id :
http://snippets.dzone.com/posts/show/536

Il marche très bien sauf pour la paginate qui est pété :

toto.com/application/handle_unrecog?page=2
Si quelqu’un a une idée.

Bon sinon concernant ce snippet 1 simple route :
map.connect ‘:login’, :controller => ‘user’, :action => “view”
suffit et ne pète pas le paginator… un peu overkill son truc.