Rotaie 4 e 5
In Rails 4 è :paramstata aggiunta l' opzione, che sembra fare esattamente quello che stai cercando. Puoi dare un'occhiata al codice Rails 3 rispetto al codice Rails 4 .
Dettagli
Puoi facilmente implementarlo nel tuo routes.rbfile:
# config/routes.rb
resources :posts, param: :slug
# app/controllers/posts_controller.rb
# ...
@post = Post.find_by(slug: params[:slug])
# ...
A partire dal rilascio di Rails 4, questa funzionalità è documentata nelle Rails Guides .
Rotaie 3
Sfortunatamente, in Rails 3, l' :keyopzione per è resourcesstata rimossa, quindi non puoi più cambiare facilmente il nome per le rotte create in questo modo semplicemente passando un'opzione extra.
Dettagli
Presumo che tu abbia già in qualche modo ottenuto l'applicazione che funziona nel modo desiderato nell'ultimo anno, ma cercherò di ottenere l'effetto che descrivi in Rails 3 in routes.rb. Richiederà solo un po 'più di lavoro rispetto al to_parammetodo. È ancora possibile definire i parametri personalizzati in percorsi definiti attraverso scopee match(o è cugini get, put, post, e delete). Scrivi semplicemente il nome del parametro che desideri nel matcher:
get 'clients/:client_name', :to => 'clients#show', :as => client
scope 'clients/:client_name' do
get 'sites/:name', :to => 'sites#show', :as => site
end
Dovresti aggiungere manualmente tutti i percorsi che resourcescrea automaticamente per te, ma otterresti quello che stai cercando. Puoi anche utilizzare efficacemente l' :controlleropzione con scopee scopeblocchi aggiuntivi per eliminare parte della ripetizione.
EDIT (8 maggio 2014): Rendi più ovvio che la risposta contiene informazioni sia per Rails 3 che per 4. Aggiorna i collegamenti al codice per andare ai numeri di riga esatti e ai commit in modo che funzionino per un periodo di tempo più lungo.
EDIT (16 novembre 2014): Rails 4 dovrebbe essere in cima ora e includere informazioni rilevanti poiché è stata la versione corrente di Rails da un po 'di tempo.
EDIT (9 agosto 2016): rifletti sul fatto che la soluzione funziona ancora in Rails 5 e aggiorna i collegamenti obsoleti.