Schienen 4 & 5
In Rails 4 wurde die :paramOption hinzugefügt, die genau das zu tun scheint, wonach Sie suchen. Sie können sich den Rails 3-Code im Vergleich zum Rails 4-Code ansehen .
Einzelheiten
Sie können dies einfach in Ihre routes.rbDatei implementieren :
# config/routes.rb
resources :posts, param: :slug
# app/controllers/posts_controller.rb
# ...
@post = Post.find_by(slug: params[:slug])
# ...
Ab der Veröffentlichung von Rails 4 ist diese Funktionalität in den Rails-Handbüchern dokumentiert .
Schienen 3
Leider ist in Rails 3 die :keyOption fürresources entfernt, sodass Sie den Namen für auf diese Weise erstellte Routen nicht mehr einfach ändern können, indem Sie einfach eine zusätzliche Option übergeben.
Einzelheiten
Ich gehe davon aus, dass Sie die Anwendung im letzten Jahr bereits irgendwie so zum Laufen gebracht haben, wie Sie es möchten, aber ich werde einen Weg gehen, um den in Rails 3 beschriebenen Effekt zu erzielen routes.rb. Es wird nur ein bisschen mehr Arbeit als die to_paramMethode erfordern. Sie können immer noch benutzerdefinierte Parameter in Routen definieren definiert mit scopeund match(oder Vettern get, put, post, unddelete ). Sie schreiben einfach den gewünschten Parameternamen in den Matcher:
get 'clients/:client_name', :to => 'clients#show', :as => client
scope 'clients/:client_name' do
get 'sites/:name', :to => 'sites#show', :as => site
end
Sie müssten alle Routen, die resourcesautomatisch für Sie erstellt werden, manuell hinzufügen , aber es würde das erreichen, wonach Sie suchen. Sie können die :controllerOption mit scopeund zusätzliche scopeBlöcke auch effektiv verwenden , um einen Teil der Wiederholung zu entfernen.
BEARBEITEN (8. Mai 2014): Machen Sie deutlicher, dass die Antwort Informationen für Rails 3 und 4 enthält. Aktualisieren Sie die Links zum Code, um genaue Zeilennummern und Commits zu erhalten, damit sie über einen längeren Zeitraum funktionieren.
BEARBEITEN (16. November 2014): Rails 4 sollte jetzt ganz oben stehen und relevante Informationen enthalten, da es sich seit einiger Zeit um die aktuelle Version von Rails handelt.
BEARBEITEN (9. August 2016): Beachten Sie, dass die Lösung in Rails 5 noch funktioniert, und aktualisieren Sie veraltete Links.