Salut tout le monde,
J’aurai besoin de votre opinion concernant mon probleme de routes.
-
Contexte: on va prendre un exemple super simple, une application de
type
weblog. Imaginons qu’on a plusieurs blogs, et que l’on veut avoir une
“pretty” url pour chaque blog du style: http://www.foo.fr/mon_blog1/,
…
http://www.foo.fr/mon_blog2, …etc. -
Mon code actuel pour config/routes.rb:
ActionController::Routing::Routes.draw do |map|
…
routes specifiques pour chaque blog
Blog.find(:all).each do |blog|
Important point d’entree !!!
map.connect “/#{blog.name}”, :controller => ‘blogs’, :action =>
‘show’,
:id => blog.id
map.resources blog.name.to_sym, :controller => ‘blogs’
map.resources(blog.name.to_sym) do |blog_resource|
blog_resource.resources :posts, :name_prefix => “#{blog.name}_”,
:path_prefix => “/#{blog.name}”
end
end
…
- Resultat: ca marche bien, sauf quand je veux editer par exemple un
post,
exemple: http://www.foo.fr/mon_blog1/posts/1;edit. La redirection se
fait
bien vers le bon controlleur (a savoir posts), avec le bon id du post et
la
bonne action (edit). Mais le probleme est que je ne sais pas pour quel
blog
je suis en train d’editer le post.
Note: C’est vrai que je pourrais le retrouver a partir du post, mais
j’aimerai le faire de maniere propre.
J’ai pense a truc du genre (avant avant derniere ligne dans le bloc de
code
precedent):
blog_resource.resources :posts, :name_prefix => “#{blog.name}_”,
:path_prefix => “/#{blog.name}”, :blog_id => blog.id
=> malheureusement, map.resources (blog_resource.resources dans mon
exemple)
n’autorise pas le passage d’autres parametres (alors maps.connect le
fait
lui).
Quelqu’un a t’il deja rencontre ce probleme ? Si oui comment avez vous
contourne le pb ? Solution clean (en evitant par exemple de me trimbaler
l’id de mon blog pour chaque url ?
merci d’avance et bon WE a tous
Did