ราง 4 และ 5
ใน Rails 4 มีการ:param
เพิ่มตัวเลือกซึ่งดูเหมือนว่าจะทำในสิ่งที่คุณกำลังมองหา คุณสามารถใช้เวลาดูที่Rails 3 รหัสเมื่อเทียบกับทางรถไฟ 4 รหัส
รายละเอียด
คุณสามารถใช้สิ่งนี้ในroutes.rb
ไฟล์ของคุณได้อย่างง่ายดาย:
# config/routes.rb
resources :posts, param: :slug
# app/controllers/posts_controller.rb
# ...
@post = Post.find_by(slug: params[:slug])
# ...
ในฐานะของการเปิดตัวของทางรถไฟ 4 ฟังก์ชั่นนี้ถูกบันทึกไว้ในคู่มือการรถไฟ
ราง 3
น่าเสียดายที่ใน Rails 3 :key
ตัวเลือกสำหรับresources
ถูกลบออกไปแล้วดังนั้นคุณจึงไม่สามารถเปลี่ยนชื่อของเส้นทางที่สร้างด้วยวิธีนี้ได้ง่ายๆอีกต่อไปเพียงแค่ส่งตัวเลือกเสริม
รายละเอียด
ผมถือว่าคุณได้แล้วอากาศอย่างใดการประยุกต์ใช้วิธีการทำงานที่คุณต้องการในปีที่ผ่านมา แต่ผมจะไปเป็นวิธีการที่จะได้รับผลที่คุณอธิบายใน Rails routes.rb
3 มันจะเกี่ยวข้องกับการทำงานมากกว่าto_param
วิธีการเล็กน้อย คุณยังสามารถกำหนดค่าพารามิเตอร์ที่กำหนดเองในเส้นทางที่กำหนดโดยใช้scope
และmatch
(หรือเป็นของญาติget
, put
, post
และdelete
) คุณเพียงแค่เขียนชื่อพารามิเตอร์ที่คุณต้องการในตัวจับคู่:
get 'clients/:client_name', :to => 'clients#show', :as => client
scope 'clients/:client_name' do
get 'sites/:name', :to => 'sites#show', :as => site
end
คุณจะต้องเพิ่มเส้นทางทั้งหมดที่resources
สร้างขึ้นโดยอัตโนมัติสำหรับคุณด้วยตนเองแต่มันจะบรรลุสิ่งที่คุณกำลังมองหา คุณยังสามารถใช้:controller
ตัวเลือกscope
และscope
บล็อกเพิ่มเติมได้อย่างมีประสิทธิภาพเพื่อกำจัดการทำซ้ำบางส่วน
แก้ไข (8 พฤษภาคม 2014):ทำให้ชัดเจนยิ่งขึ้นคำตอบมีข้อมูลสำหรับทั้ง Rails 3 & 4 อัปเดตลิงก์ไปยังรหัสเพื่อไปยังหมายเลขบรรทัดที่แน่นอนและคอมมิตเพื่อให้ใช้งานได้นานขึ้น
แก้ไข (16 พฤศจิกายน 2014): Rails 4 ควรอยู่ที่ด้านบนสุดในขณะนี้และรวมข้อมูลที่เกี่ยวข้องเนื่องจากเป็นเวอร์ชันปัจจุบันของ Rails มาระยะหนึ่งแล้ว
แก้ไข (9 ส.ค. 2016):สะท้อนให้เห็นว่าโซลูชันยังคงใช้งานได้ใน Rails 5 และอัปเดตลิงก์ที่ล้าสมัย