Rute bernama _path vs _url

109

Rel menyediakan rute bernama .

Routes helper bisa dipanggil menggunakan path atau url

mis. dari dokumen:

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

terus terang saya belum pernah menggunakan *_urlhelper, saya bisa membuat semuanya bekerja menggunakan *_path.

Saya agak bingung apa tujuan dari dua pembantu yang berbeda ini?

bagaimana mereka berbeda satu sama lain?

beberapa contoh nyata dengan penjelasan kapan harus menggunakan apa yang bagus.

Pritesh Jain
sumber

Jawaban:

156

_pathpembantu menyediakan jalur situs-root-relatif. Anda mungkin harus menggunakan ini sebagian besar waktu.

_urlpembantu menyediakan jalur absolut, termasuk protokol dan nama server. Saya telah menemukan bahwa saya terutama menggunakan ini di email saat membuat tautan ke aplikasi di server. Mereka harus digunakan terutama saat menyediakan tautan untuk penggunaan eksternal. (Pikirkan tautan email, RSS, dan hal-hal seperti bidang salin dan tempel URL di bawah bagian "Bagikan" video YouTube.)

Chris Peters
sumber
kedua jawabannya hampir sama tetapi saya memberikan jawaban yang benar kepada Anda untuk contoh "salin dan tempel bidang URL di bawah bagian" Bagikan "video YouTube dan sudah memberi +1 untuk @mori :)
Pritesh Jain
Terima kasih. Saya membuat solusi DAM dengan kolom "Bagikan URL" salin / tempel yang mirip dengan yang dilakukan YouTube. Itu adalah salah satu hal pertama yang terlintas dalam pikiran.
Chris Peters
13

Saat Anda meletakkan link di situs Anda sendiri, bagian domain dari rute tersebut akan menjadi redundan, dan menambah ukuran halaman, jadi Anda cukup menggunakan bagian jalur URL dengan *_pathhelper. Di sisi lain, jika URL akan digunakan di luar situs Anda, misalnya email atau RSS feed, seluruh URL diperlukan, jadi gunakan *_urlhelper.

Mori
sumber
Baru-baru ini saya mengalami masalah dengan tautan dan domain, dan bantuan _url adalah satu-satunya cara saya untuk mendapatkan tautan menggunakan domain yang sesuai dan bukan tautan "terkait hosting".
Pierre-Adrien Buisson
1
Saya juga menggunakan pembantu _url ketika memiliki beberapa subdomain di aplikasi. Misalnya, ketika saya di abc.example.com _path akan dialihkan ke abc.example.com/somesection ketika _url akan mengalihkan dengan benar ke example.com/somesection
Wordica
10

Seperti jawaban lain yang menjelaskan, Anda harus menggunakan _urltautan email, dll. Tetapi saya ingin menambahkan bahwa Anda juga harus menggunakan _urldalam pengalihan, seperti yang dijelaskan di sini:

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

dan di sini:

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

Anda juga dapat melihat bagian yang relevan dari spesifikasi HTTP di sini:

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

Daniel Romero
sumber
1
Mengutip tautan pertama (seandainya hilang): "Namun, di pengontrol, * _url diperlukan untuk redirect_to karena spesifikasi HTTP mengamanatkan bahwa header Location: dalam pengalihan 3xx adalah URL lengkap."
Terrabits
2

_path menyediakan jalur relatif.

_url menyediakan jalur absolut.

Kapan pun Anda mengirim URL dalam email, dll. Daripada itu, praktik terbaiknya adalah menggunakan _url daripada _path.

SD
sumber
Downvoting karena inilah yang telah dijawab Chris Peters selama dua tahun sebelum jawaban ini. Jawaban yang berlebihan tidak membantu.
jeffdill2