Rel 4 & 5
Di Rails 4, :paramopsi telah ditambahkan, yang tampaknya melakukan apa yang Anda cari. Anda dapat melihat kode Rails 3 dibandingkan dengan kode Rails 4 .
Detail
Anda dapat dengan mudah menerapkan ini di routes.rbfile Anda :
# config/routes.rb
resources :posts, param: :slug
# app/controllers/posts_controller.rb
# ...
@post = Post.find_by(slug: params[:slug])
# ...
Sejak rilis Rails 4, fungsionalitas ini didokumentasikan di Panduan Rails .
Rel 3
Sayangnya, di Rails 3, :keyopsi untuk resourcestelah dihapus, sehingga Anda tidak dapat lagi dengan mudah mengubah nama untuk rute yang dibuat dengan cara ini hanya dengan memasukkan opsi tambahan.
Detail
Saya berasumsi bahwa Anda entah bagaimana sudah mendapatkan aplikasi yang berfungsi seperti yang Anda inginkan pada tahun lalu, tetapi saya akan membahas cara untuk mendapatkan efek yang Anda gambarkan di Rails 3 in routes.rb. Ini hanya akan melibatkan sedikit lebih banyak pekerjaan daripada to_parammetode. Anda masih dapat menentukan parameter khusus dalam rute didefinisikan menggunakan scopedan match(atau sepupu itu get, put, post, dan delete). Anda cukup menulis nama parameter yang Anda inginkan di matcher:
get 'clients/:client_name', :to => 'clients#show', :as => client
scope 'clients/:client_name' do
get 'sites/:name', :to => 'sites#show', :as => site
end
Anda harus menambahkan semua rute yang dibuat resourcessecara otomatis untuk Anda secara manual , tetapi itu akan mencapai apa yang Anda cari. Anda juga dapat secara efektif menggunakan :controlleropsi dengan scopedan scopeblok tambahan untuk menghilangkan beberapa pengulangan.
EDIT (8 Mei 2014): Buat lebih jelas bahwa jawaban berisi informasi untuk Rails 3 & 4. Perbarui tautan ke kode untuk pergi ke nomor baris yang tepat dan komit sehingga mereka harus bekerja untuk jangka waktu yang lebih lama.
EDIT (Nov 16, 2014): Rails 4 harus berada di atas sekarang dan menyertakan informasi yang relevan karena ini adalah versi Rails saat ini untuk beberapa waktu sekarang.
EDIT (Agustus 9, 2016): Merefleksikan bahwa solusinya masih berfungsi di Rails 5, dan perbarui tautan lama.