Routes nommées et préfix

Bonjour,

J’ai un soucis avec les routes contenant un “préfix”.

Mon routes.rb contient cette ligne :
map.page ‘page-:permalink.html’, :controller => ‘page’, :action =>
‘show’ ?

Cependant lorsque dans ma vue, j’appel page_path(page.permalink),
j’obtiens l’erreur :

NoMethodError Exception: You have a nil object when you didn’t expect
it!
The error occurred while evaluating nil.to_sym

Après quelques essais, je n’ai trouvé qu’un moyen pour insérer une
constante avant le permalien :
map.page ‘:permalink.html’, :controller => ‘page’, :action => ‘show’,
:permalink => /page-(.*)/

Je n’aime pas tellement cette méthode.

Y a t’il une autre façon de faire ?

Cordialement,
Morgan

NoMethodError Exception: You have a nil object when you didn’t expect
it!
The error occurred while evaluating nil.to_sym
Il faudrait donner plus de détails concernant cette erreur.

Fernando P. wrote:

NoMethodError Exception: You have a nil object when you didn’t expect
it!
The error occurred while evaluating nil.to_sym
Il faudrait donner plus de détails concernant cette erreur.

Dans ce gist, vous trouverez un extrait du log de développement et mon
test sous RSpec.

Bonjour Morgan,

C’est dommage de s’écarter des conventions. Pourquoi ne pas utiliser
des URL au format “/permalink/:id” ?

Considérer le tiret comme séparateur, ça limite les possibilités en
référencement naturel (le tiret est majoritairement utilisé pour
séparer les mots dans une URL), mais certes on peut le faire avec des
underscores. Et puis des tirets, on en retrouve dans les noms de
domaine, je suis donc curieux de connaître tous les impacts de ta
modification !

D’après ce que je vois, l’extension “html” n’a aucune
utilité.
Personnellement, j’utilise un plugin qui me remplace mes id par des
tokens, je me contente de dire sur quel champ générer le token et le
reste est transparent.

Exemple, je déclare la route :
map.page ‘/page/:id’, :controller => ‘page’, :action => ‘show’

Et “page_path(page)” me génère “/page/42-le-titre-de-ma-page”.


Julien Vignolles

Dohko Aurora wrote:

Fernando P. wrote:

NoMethodError Exception: You have a nil object when you didn’t expect
it!
The error occurred while evaluating nil.to_sym
Il faudrait donner plus de détails concernant cette erreur.

Dans ce gist, vous trouverez un extrait du log de développement et mon
test sous RSpec.

development.log · GitHub

J’ai finalement trouvé une autre solution.

Apparemment les séparateurs sont définis dans
ActionController::Routing::SEPARATORS. De base, nous avons SEPARATORS =
%w( / . ? ) dans Rails 2.3.2.

J’ai donc redéfini la constante dans un plugin (dans une lib, j’obtiens
un warning) en y ajoutant le tiret.

Merci.