2009-09-04 5 views
0

J'utilise actuellement le plugin Permalink_fu qui crée correctement l'URI suivant:Comment créer une route Rails vers un permalien - sans le contrôleur dans l'URL?

http://localhost:3000/pages/some-permalink-to-page 

Je veux maintenant configurer mon cheminement afin que je puisse laisser tomber le/pages/partie de l'URI me laissant avec:

http://localhost:3000/some-permalink-to-page 

J'ai essayé d'ajouter ce qui suit au fond de mon fichier config/routes.rb:

map.connect ':permalink', :controller => 'page', :action => 'view' 

mais je reçois l'erreur suivante, lorsque je tente n ew URI:

uninitialized constant PageController 

Avez-vous des suggestions? Je cours Rails 2.2.2 et suis réticent à essayer des rails de bord juste pour l'instant.

Un grand merci,

Ben ...

Répondre

0

Dans votre itinéraire, doit: être contrôleur "pages" (au pluriel)?

0

Merci Mike, j'avais fait un certain nombre d'erreurs. C'est comme ça que je l'ai fait fonctionner. Dans le fichier routes.rb ajouter le routage suivant, près du bas de la page:

map.connect ':id', :controller => 'pages', :action => 'show' 

Le problème est alors maintenant une URL mauvaise va échouer mal, par exemple

http://localhost:3000/this-permalink-doesnt-exist 

Entraînera une erreur et non une erreur 404.

Je fixe en ajoutant la ligne suivante à mon pages_controller.rb montrent l'action:

def show 
    @page = Page.find_by_permalink(params[:id]) 
    if @page.nil? then 
     render :file => 'public/404.html', :status => '404' 
    else 
     respond_to do |format| 
     format.html # show.html.erb 
     format.xml { render :xml => @page } 
     end 
    end 
    end 

Maintenant je les comportements corrects pour toutes les variantes de l'URL:

http://localhost:3000/pages/some-permalink-to-page 
http://localhost:3000/some-permalink-to-page 
and the if an invalid permalink is entered 
http://localhost:3000/no-such-permalink 
gets rendered to the default public/404.html file. 

Espoir cela aide quelqu'un d'autre, et merci encore Mike. Ben ...

0

Il y a une faute de frappe dans votre entrée routes.rb:

map.connect ':permalink', :controller => 'page', :action => 'view' 

Il faut lire:

map.connect ':permalink', :controller => 'pages', :action => 'view' 

paramètre: contrôleur est le nom singulier du contrôleur, devrait être «pages»

Questions connexes