ตัวช่วยพา ธ สร้างเส้นทางด้วยจุดแทนการใช้เครื่องหมายทับ


91

ใน route.rb ของฉันฉันมีสิ่งต่อไปนี้:

resources :message_threads

เมื่อฉันโทร:

message_threads_path(1)

ฉันเข้าใจ:

/message_threads.1

ทำไมถึงเป็นแบบนี้? ทรัพยากรอื่น ๆ ของฉันทำงานได้ดี ฉันพูดพหูพจน์ไม่ถูกต้องหรืออะไร?

คำตอบ:


145

ใช่นี่เป็นข้อผิดพลาดของพหูพจน์

เมื่อผ่าน ID 1 ฉันคิดว่าคุณต้องการแสดงระเบียนเดียว

ดังนั้นคุณต้องใช้เอกพจน์ 'message_thread':

message_thread_path(1)

ซึ่งจะให้ผล:

http://localhost:3000/message_threads/1

3
เฮ้. มันเกิดขึ้นกับเราทุกคน บ่อยครั้ง อาจจะไม่ใช่ครั้งสุดท้ายที่คุณเห็นข้อผิดพลาดนี้!
Scott

ฉันได้รับข้อผิดพลาดเดียวกันนี้กับเส้นทางที่ตั้งชื่อที่ฉันสร้างขึ้นและฉันไม่ได้เป็นพหูพจน์ การแก้ไขจะเป็นอย่างไร
kakubei

1
@kakubei ตรวจสอบไฟล์เส้นทางของคุณ คุณกำลังโทรresources :my_modelหรือresources :my_models? (คุณต้องพหูพจน์ในไฟล์เส้นทาง)
JellicleCat

เส้นทางทั้งหมดของฉันเป็นพหูพจน์
kakubei

1
เพิ่งไป 5 โมงเย็นกำลังจะทุบหัวฉันกับแป้นพิมพ์นี่แหล่ะ ขอบคุณคน
Phantomwhale

19

บางครั้งก็เกิดขึ้นเมื่อคุณไม่ได้ระบุพารามิเตอร์: as ในเส้นทางของคุณ:

delete "delete/:id" => "home#delete"

เปลี่ยนไปเป็น:

delete "delete/:id" => "home#delete", as: :delete

(ไม่ต้องสนใจตัวอย่างแปลก ๆ ที่เพิ่งเกิดขึ้นกับสิ่งที่เราเพิ่งพบในแอปภายในที่เรากำลังสร้าง)


4
สิ่งนี้ได้ผลสำหรับฉัน การระบุ: ตามที่ตั้งชื่อให้ฉันซึ่งฉันสามารถต่อท้าย "_path" และให้ Rails รู้ว่าฉันกำลังขออะไรใน link_to เดิมเมื่อไฟล์เส้นทางของฉันมี: 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) %> ทำงาน
ayang

0

คนอื่น ๆ ที่มาที่นี่อาจอยู่ในสถานการณ์นี้:

หากคุณมีทรัพยากรเอกพจน์ที่ประกาศไว้ในroutes.rb:

resource :map

map_pathคุณไม่จำเป็นที่จะผ่านวัตถุที่จะ การพยายามโทรmap_path(map)จะทำให้เกิดพฤติกรรมที่คล้ายกัน (เช่น URL like map.12)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.