Đường ray 4 & 5
Trong Rails 4, :paramtùy chọn đã được thêm vào, có vẻ như sẽ làm chính xác những gì bạn đang tìm kiếm. Bạn có thể xem qua mã Rails 3 so với mã Rails 4 .
Chi tiết
Bạn có thể dễ dàng triển khai điều này trong routes.rbtệp của mình :
# config/routes.rb
resources :posts, param: :slug
# app/controllers/posts_controller.rb
# ...
@post = Post.find_by(slug: params[:slug])
# ...
Kể từ khi phát hành Rails 4, chức năng này được ghi lại trong Hướng dẫn về Rails .
Đường ray 3
Thật không may, trong Rails 3, :keytùy chọn cho resourcesđã bị xóa, vì vậy bạn không còn có thể dễ dàng thay đổi tên cho các tuyến đường được tạo theo cách này bằng cách chỉ cần chuyển qua một tùy chọn bổ sung.
Chi tiết
Tôi cho rằng bằng cách nào đó bạn đã làm cho ứng dụng hoạt động theo cách bạn muốn trong năm qua, nhưng tôi sẽ đi sâu vào một cách để có được hiệu ứng như bạn mô tả trong Rails 3 routes.rb. Nó sẽ chỉ liên quan đến công việc nhiều hơn một chút so với to_paramphương pháp. Bạn vẫn có thể xác định các thông số tùy chỉnh trong các tuyến đường được xác định sử dụng scopevà match(hoặc nó anh em họ get, put, post, và delete). Bạn chỉ cần viết tên tham số bạn muốn trong trình kết hợp:
get 'clients/:client_name', :to => 'clients#show', :as => client
scope 'clients/:client_name' do
get 'sites/:name', :to => 'sites#show', :as => site
end
Bạn sẽ phải thêm thủ công tất cả các tuyến đường resourcestự động tạo cho bạn, nhưng nó sẽ đạt được những gì bạn đang tìm kiếm. Bạn cũng có thể sử dụng hiệu quả :controllertùy chọn với scopevà các scopekhối bổ sung để loại bỏ một số lặp lại.
CHỈNH SỬA (ngày 8 tháng 5 năm 2014): Làm rõ ràng hơn câu trả lời chứa thông tin cho cả Rails 3 & 4. Cập nhật các liên kết đến mã để chuyển đến số dòng chính xác và cam kết để chúng hoạt động trong một khoảng thời gian dài hơn.
CHỈNH SỬA (ngày 16 tháng 11 năm 2014): Rails 4 phải ở trên cùng ngay bây giờ và bao gồm các thông tin liên quan vì nó là phiên bản hiện tại của Rails được một thời gian.
CHỈNH SỬA (ngày 9 tháng 8 năm 2016): Phản ánh rằng giải pháp vẫn hoạt động trong Rails 5 và cập nhật các liên kết đã lỗi thời.