Các tuyến đường được đặt tên _path vs _url


109

Rails cung cấp các tuyến đường được đặt tên .

Trình trợ giúp định tuyến có thể được gọi bằng cách sử dụng đường dẫn hoặc url

ví dụ từ tài liệu:

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

nói thẳng ra là tôi chưa bao giờ sử dụng *_urlhelper, tôi đã có thể làm cho mọi thứ hoạt động bằng cách sử dụng *_path.

Tôi hơi bối rối mục đích của hai người trợ giúp khác nhau này là gì?

chúng khác nhau như thế nào?

một số ví dụ thực tế với giải thích khi nào sử dụng những gì sẽ là tuyệt vời.

Câu trả lời:


156

_pathtrợ giúp cung cấp một đường dẫn trang-gốc-tương đối. Bạn có thể nên sử dụng nó hầu hết thời gian.

_urltrình trợ giúp cung cấp một đường dẫn tuyệt đối, bao gồm cả giao thức và tên máy chủ. Tôi nhận thấy rằng tôi chủ yếu sử dụng chúng trong email khi tạo liên kết đến ứng dụng trên máy chủ. Chúng chủ yếu nên được sử dụng khi cung cấp các liên kết để sử dụng bên ngoài. (Hãy nghĩ đến các liên kết email, RSS và những thứ như trường URL sao chép và dán trong phần "Chia sẻ" của video YouTube.)


cả câu trả lời là gần như tương tự nhưng tôi cho đi câu trả lời đúng cho bạn tor ví dụ này "sao chép và dán URL lĩnh vực dưới một đoạn video của YouTube '' phần" Chia sẻ và đã 1 cho @mori :)
Pritesh Jain

Cảm ơn. Tôi đang xây dựng giải pháp DAM trong đó có trường "Chia sẻ URL" sao chép / dán tương tự như những gì YouTube làm. Đó là một trong những điều đầu tiên xuất hiện trong tâm trí.
Chris Peters

13

Khi bạn đặt một liên kết trong trang web của mình, phần tên miền của tuyến đường là dư thừa và thêm vào kích thước trang, vì vậy bạn chỉ có thể sử dụng phần đường dẫn của URL với trình *_pathtrợ giúp. Mặt khác, nếu URL được sử dụng bên ngoài trang web của bạn, chẳng hạn như email hoặc nguồn cấp RSS, thì toàn bộ URL là cần thiết, vì vậy hãy sử dụng trình *_urltrợ giúp.


Gần đây tôi đã gặp sự cố với liên kết và miền và trình trợ giúp _url là phương tiện duy nhất của tôi để nhận liên kết bằng cách sử dụng miền thích hợp chứ không phải liên kết "liên quan đến lưu trữ".
Pierre-Adrien Buisson

1
Tôi cũng sử dụng trình trợ giúp _url khi có một số miền phụ trong ứng dụng. Ví dụ: khi tôi trên abc.example.com _path sẽ chuyển hướng đến abc.example.com/somesection khi _url sẽ chuyển hướng chính xác đến example.com/somesection
Wordica

10

Như các câu trả lời khác giải thích, bạn nên sử dụng _urltrong liên kết email, v.v. Nhưng tôi muốn nói thêm rằng bạn cũng nên sử dụng _urltrong chuyển hướng, như được giải thích ở đây:

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

và đây:

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

Bạn cũng có thể xem phần liên quan của đặc tả HTTP tại đây:

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


1
Trích dẫn liên kết đầu tiên (trong trường hợp nó biến mất): "Tuy nhiên, trong bộ điều khiển, * _url là cần thiết cho redirect_to vì đặc tả HTTP yêu cầu rằng tiêu đề Location: trong 3xx chuyển hướng là một URL hoàn chỉnh."
Terrabits ngày

2

_path cung cấp đường dẫn tương đối.

_url cung cấp đường dẫn tuyệt đối.

Bất cứ khi nào bạn gửi một URL trong email, v.v., cách tốt nhất là sử dụng _url thay vì _path.


Không đồng ý vì đây chính xác là những gì Chris Peters đã trả lời hơn hai năm trước câu trả lời này. Các câu trả lời thừa không hữu ích.
jeffdill2 11/09/18
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.