เส้นทางที่ตั้งชื่อ _path vs _url


109

รางให้เส้นทางชื่อ

ตัวช่วยกำหนดเส้นทางสามารถเรียกได้โดยใช้เส้นทางหรือ URL

เช่นจากเอกสาร:

# and provide these named routes
root_url   # => 'http://www.example.com/'
root_path  # => '/'

พูดตรงไปตรงฉันไม่เคยใช้ผู้ช่วยยังฉันก็สามารถที่จะได้รับสิ่งที่ทำงานโดยใช้*_url*_path

ฉันสับสนนิดหน่อยว่าจุดประสงค์ของตัวช่วยทั้งสองนี้แตกต่างกันอย่างไร?

แตกต่างกันอย่างไร?

ตัวอย่างจริงพร้อมคำอธิบายว่าเมื่อใดควรใช้สิ่งที่ดี

คำตอบ:


156

_pathผู้ช่วยจัดเตรียมเส้นทางที่เกี่ยวข้องกับไซต์รูท คุณควรใช้เวลาส่วนนี้เป็นส่วนใหญ่

_urlผู้ช่วยเหลือระบุเส้นทางที่แน่นอนรวมถึงโปรโตคอลและชื่อเซิร์ฟเวอร์ ฉันพบว่าฉันใช้สิ่งเหล่านี้เป็นหลักในอีเมลเมื่อสร้างลิงก์ไปยังแอปบนเซิร์ฟเวอร์ ควรใช้เป็นหลักเมื่อมีลิงก์สำหรับใช้ภายนอก (ลองนึกถึงลิงก์อีเมล RSS และสิ่งต่างๆเช่นช่องคัดลอกและวาง URL ในส่วน "แชร์" ของวิดีโอ YouTube)


คำตอบทั้งสองเกือบจะคล้ายกัน แต่ฉันให้คำตอบที่ถูกต้องแก่คุณสำหรับตัวอย่างนี้ "คัดลอกและวางช่อง URL ในส่วน" แชร์ "ของวิดีโอ YouTube และ +1 สำหรับ @mori แล้ว :)
Pritesh Jain

ขอบคุณ. ฉันกำลังสร้างโซลูชัน DAM ที่มีช่อง "แชร์ URL" คัดลอก / วางคล้ายกับที่ YouTube ทำ มันเป็นหนึ่งในสิ่งแรกที่อยู่ในใจ
Chris Peters

13

เมื่อคุณใส่ลิงก์ในไซต์ของคุณเองส่วนโดเมนของเส้นทางจะซ้ำซ้อนและเพิ่มขนาดหน้าดังนั้นคุณสามารถใช้ส่วนเส้นทางของ URL กับ*_pathผู้ช่วยได้ ในทางกลับกันหากต้องใช้ URL ภายนอกไซต์ของคุณเช่นอีเมลหรือฟีด RSS จำเป็นต้องใช้ URL ทั้งหมดดังนั้นโปรดใช้ตัว*_urlช่วย


เมื่อเร็ว ๆ นี้ฉันมีปัญหากับลิงก์และโดเมนและตัวช่วย _url เป็นวิธีเดียวของฉันในการรับลิงก์โดยใช้โดเมนที่เหมาะสมไม่ใช่ลิงก์ "ที่เกี่ยวข้องกับการโฮสต์"
Pierre-Adrien Buisson

1
ฉันยังใช้ตัวช่วย _url เมื่อมีโดเมนย่อยในแอป ตัวอย่างเช่นเมื่อ im บน abc.example.com _path จะเปลี่ยนเส้นทางไปที่ abc.example.com/somesection เมื่อ _url จะเปลี่ยนเส้นทางไปยัง example.com/somesection อย่างถูกต้อง
Wordica

10

ตามที่คำตอบอื่น ๆ อธิบายไว้คุณควรใช้_urlในลิงก์อีเมลเป็นต้น แต่ฉันต้องการเพิ่มว่าคุณควรใช้_urlในการเปลี่ยนเส้นทางด้วยตามที่อธิบายไว้ที่นี่:

https://www.ruby-forum.com/topic/101346#221052

และที่นี่:

http://viget.com/extend/rails-named-routes-path-vs-url

คุณสามารถดูส่วนที่เกี่ยวข้องของข้อกำหนด HTTP ได้ที่นี่:

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.30


1
การอ้างถึงลิงก์แรก (ในกรณีที่หายไป): "ในคอนโทรลเลอร์นั้นจำเป็นต้องใช้ * _url สำหรับการเปลี่ยนเส้นทาง_toเนื่องจากข้อกำหนดของ HTTP กำหนดให้ตำแหน่ง: ส่วนหัวในการเปลี่ยนเส้นทาง 3xx เป็น URL ที่สมบูรณ์"
Terrabits

2

_path ให้เส้นทางสัมพัทธ์

_url ให้เส้นทางที่แน่นอน

เมื่อใดก็ตามที่คุณส่ง URL ในอีเมลเป็นต้นแนวทางปฏิบัติที่ดีที่สุดคือใช้ _url แทน _path


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