ใน route.rb ของฉันฉันมีสิ่งต่อไปนี้:
resources :message_threads
เมื่อฉันโทร:
message_threads_path(1)
ฉันเข้าใจ:
/message_threads.1
ทำไมถึงเป็นแบบนี้? ทรัพยากรอื่น ๆ ของฉันทำงานได้ดี ฉันพูดพหูพจน์ไม่ถูกต้องหรืออะไร?
ใน route.rb ของฉันฉันมีสิ่งต่อไปนี้:
resources :message_threads
เมื่อฉันโทร:
message_threads_path(1)
ฉันเข้าใจ:
/message_threads.1
ทำไมถึงเป็นแบบนี้? ทรัพยากรอื่น ๆ ของฉันทำงานได้ดี ฉันพูดพหูพจน์ไม่ถูกต้องหรืออะไร?
คำตอบ:
ใช่นี่เป็นข้อผิดพลาดของพหูพจน์
เมื่อผ่าน ID 1 ฉันคิดว่าคุณต้องการแสดงระเบียนเดียว
ดังนั้นคุณต้องใช้เอกพจน์ 'message_thread':
message_thread_path(1)
ซึ่งจะให้ผล:
http://localhost:3000/message_threads/1
resources :my_model
หรือresources :my_models
? (คุณต้องพหูพจน์ในไฟล์เส้นทาง)
บางครั้งก็เกิดขึ้นเมื่อคุณไม่ได้ระบุพารามิเตอร์: as ในเส้นทางของคุณ:
delete "delete/:id" => "home#delete"
เปลี่ยนไปเป็น:
delete "delete/:id" => "home#delete", as: :delete
(ไม่ต้องสนใจตัวอย่างแปลก ๆ ที่เพิ่งเกิดขึ้นกับสิ่งที่เราเพิ่งพบในแอปภายในที่เรากำลังสร้าง)
match "/xyz/show/:project_id" => "xyz#show_project", :via => [:get]
มาร์กอัปมุมมองของฉัน: <%= link_to "Show Details", xyz_show_path(@project) %>
เก็บไว้ผลิต: http://localhost:3000/xyz/show.1
เปลี่ยนไฟล์เส้นทางเป็น: match "/xyz/show/:project_id" => "xyz#show_project", :via => [:get], :as => "show"
อนุญาต: <%= link_to "Show Details", show_path(@project) %>
ทำงาน
คนอื่น ๆ ที่มาที่นี่อาจอยู่ในสถานการณ์นี้:
หากคุณมีทรัพยากรเอกพจน์ที่ประกาศไว้ในroutes.rb
:
resource :map
map_path
คุณไม่จำเป็นที่จะผ่านวัตถุที่จะ การพยายามโทรmap_path(map)
จะทำให้เกิดพฤติกรรมที่คล้ายกัน (เช่น URL like map.12
)