2012-06-29 12 views
6

Supponiamo di voler avere un blog con Rails 3 sul mio sito Web e sarà l'unica cosa che ho su di esso. Vorrei utilizzare Rails per implementarlo, ma non mi piacciono gli URL prodotti da Rails. Vorrei URL simile a questo:Rails 3 URL senza nome controller

example.com/2012/05/10/foo

Non voglio una cosa del genere, che io so come fare (con to_param):

example.com/entries/2012/05/10/foo

ho ancora voglia di usare il aiutanti come

new_entry_path(@entry) # -> example.com/new 
entry_path(@entry) # -> example.com/2012/05/10/foo 
edit_entry_path(@entry) # -> example.com/2012/05/10/foo/edit 
destroy_entry_path(@entry) 
form_for(@entry) 
link_to(@entry.title, @entry) 

e così via. Ho poi avrò commenti e voglio renderli accessibili come le proprie risorse anche, come

example.com/2012/05/10/foo/comments/5

e tali URL dovrebbe anche essere possibile ottenere con gli aiutanti normali:

edit_entry_comment_path(@entry, @comment) # -> example.com/2012/05/10/foo/comments/5/edit 

o qualcosa come quello.

Quindi è possibile ottenere URL senza il nome del controller e utilizzare ancora i metodi di supporto url? Basta sovrascrivere to_param per cambiare sempre la parte dopo il nome del controller nell'URL. Sarebbe davvero utile avere qualche codice di esempio.

risposta

13

tuo routes.rb probabilmente ha una linea simile a questa:

resources :entries 

che produce percorsi della forma /entries/2012/05/10/foo.


Esiste un argomento :path che consente di utilizzare qualcosa oltre il nome predefinito entries. Ad esempio:

resources :entries, :path => 'my-cool-path' 

produrrà percorsi del modulo /my-cool-path/2012/05/10/foo.


Ma, se noi passa una stringa vuota per :path, vediamo il comportamento che stai cercando:

resources :entries, :path => '' 

produrrà percorsi della forma /2012/05/10/foo.

+2

Perché è stato votato? È la risposta corretta ... – jaredonline

+0

Sì, sto cercando di risolverlo da solo - e non solo uno, ma due! Forse è un'obiezione all'apparente abbozzamento della soluzione (vedo intuizione che dice che i percorsi sarebbero "// 2012/05/10/foo" con una barra precedente in più), ma sicuramente funziona ed è decisamente molto più facile e più Rails-y che reimplementare manualmente tutti i percorsi pieni di risorse. – Matchu

+0

Sì. Era a -3 quando sono arrivato qui. Forse perché il percorso specificato non ha effettivamente le informazioni/anno/mese/data? – jaredonline