Rotaie 4 e 5
In Rails 4 è :param
stata 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.rb
file:
# 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' :key
opzione per è resources
stata 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_param
metodo. È ancora possibile definire i parametri personalizzati in percorsi definiti attraverso scope
e 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 resources
crea automaticamente per te, ma otterresti quello che stai cercando. Puoi anche utilizzare efficacemente l' :controller
opzione con scope
e scope
blocchi 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.