Đường ray 4 & 5
Trong Rails 4, :param
tù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.rb
tệ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, :key
tù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_param
phươ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 scope
và 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 resources
tự độ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ả :controller
tùy chọn với scope
và các scope
khố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.