Je m'en sors pas avec les routes, besoin d'aide

Salut,

Voilà mon problème.

J’ai une appli d’administration qui permet de créer un blog et je
souhaiterai utiliser les routes pour faire la redirection vers le bon
controller.

Par exemple :

Je crée un site de blog ayant pour nom lenomdublog.

L’url pour y accéder doit être :

www.sitedeblog.com/lenomdublog/

Je souhaiterai donc que mon fichier de routes puisse récuperer la partie
/nomdublog/ pour pouvoir rediriger la connexion vers le controleur
d’affichage des blogs.

Du coup j’étais parti sur une régle du style :

map.connect
“:nomblog/”,:controller=>“afficheblog”,:requirements=>{:nomblog=>/[a-z]/}

Une petite idée pour m’aider ?

Ola,

Plusieurs choses a dire, tout d’abord, ta regle devrait marcher a
priori.
Sinon,

Meme chose avec le nom des controllers, si tu as un controlleur
‘comment_controller.rb’, tu dois eviter qu’un de tes blogs s’appelent
‘comment’…etc.

Solution: Dans ton blog.rb, rajoute la validation suivante:
validates_exclusion_of :name, :in => FORBIDDEN_NAMES, :message => “must
not
be a reserved word (blogs, posts, …etc
)”

ou FORBIDDEN_NAMES = %w{blogs posts sessions comments}

  • Pour mon appli de blogs, j’ai utiliser le systeme des “jolies urls”,
    ce
    qui donne le truc suivant:
  • map.connect “/:id”, :controller => ‘blogs’, :action => ‘show’

  • dans blog.rb, j’ai ajoute la methode suivante:
    def to_param
    self.name
    end

    Remarque: Verifie que l’attribut name du blog est unique !

  • Tu peux faire la meme chose avec le titre des posts, dans post.rb:
    def to_param
    “#{self.id}-#{self.title.downcase.gsub(/\s+/,
    '').gsub(/[^a-zA-Z0-9]+/, ‘’)}”
    end

Voila, cela devrait te donner des idees :-)))
a+

Did

Le 05/02/07, Frioffol F. [email protected] a écrit :

didier lafforgue wrote:

Ola,

Plusieurs choses a dire, tout d’abord, ta regle devrait marcher a
priori.
Sinon,

Meme chose avec le nom des controllers, si tu as un controlleur
‘comment_controller.rb’, tu dois eviter qu’un de tes blogs s’appelent
‘comment’…etc.

Solution: Dans ton blog.rb, rajoute la validation suivante:
validates_exclusion_of :name, :in => FORBIDDEN_NAMES, :message => “must
not
be a reserved word (blogs, posts, …etc
)”

ou FORBIDDEN_NAMES = %w{blogs posts sessions comments}

  • Pour mon appli de blogs, j’ai utiliser le systeme des “jolies urls”,
    ce
    qui donne le truc suivant:
  • map.connect “/:id”, :controller => ‘blogs’, :action => ‘show’

  • dans blog.rb, j’ai ajoute la methode suivante:
    def to_param
    self.name
    end

    Remarque: Verifie que l’attribut name du blog est unique !

  • Tu peux faire la meme chose avec le titre des posts, dans post.rb:
    def to_param
    “#{self.id}-#{self.title.downcase.gsub(/\s+/,
    '').gsub(/[^a-zA-Z0-9]+/, ‘’)}”
    end

Voila, cela devrait te donner des idees :-)))
a+

Did

Le 05/02/07, Frioffol F. [email protected] a écrit :

merci did pour ces infos !

en fait j’ai réusi à faire ce que je voulais en faisant :

map.connect “/:nomblog/”,:controller=>“afficheblog”

puis dans mon controller je récupère le parametre " nomblog " et je vais
chercher dans la BDD les infos qui vont bien.

par contre je comprends pas pourquoi ma règle ne fonctionne pas :

:nomblog=>/[a-z]/

je suis vraiment pas trés fort en expression régulière mais il me
semblait que celle ci devrait fonctionner.

bref ça fonctionne sans…

a+

Tout a fait Stephane !!! J’en profite pour donner le site de ref
(d’apres
certains) pour les regexp: Ruby Regexp Class - Regular Expressions in Ruby

Sinon friof*, a mon avis, tu devrais enlever ta regexp car je pense que
c’est une contrainte un peu “penible” (c’est mon pt de vue) d’avoir des
noms
de blogs sans chiffres ou caracteres genre _, -, …etc.

Did

Le 05/02/07, Stéphane Thibaudeau [email protected] a écrit
:

Il manque sans doute un “+” dans ton expression régulière…
Est-ce que par hasard ça ne marcherait pas quand ton nom de blog est
constitué d’une seule lettre ? ;o)

Stéphane.

2007/2/5, Frioffol F. [email protected]:

effectivement c’est beaucoup mieux si je mets un + dans mon regexp…
merci pour le lien Did je vais en avoir besoin.

a+