Adlandırılmış rotalar _path vs _url


109

Rails, adlandırılmış yollar sağlar .

Yol yardımcısı, yol veya url kullanılarak çağrılabilir

ör. dokümanlardan:

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

açıkçası *_urlhenüz helper'ı hiç kullanmadım , kullanarak işleri çalıştırmayı başardım *_path.

Biraz kafam karıştı, bu iki farklı yardımcının amacı nedir?

birbirlerinden nasıl farklılar?

Neyin harika olacağını ne zaman kullanacağınızı açıklayan bazı gerçek örnekler.

Yanıtlar:


156

_pathyardımcılar site kökünü temel alan bir yol sağlar. Muhtemelen bunu çoğu zaman kullanmalısın.

_urlyardımcılar, protokol ve sunucu adı dahil olmak üzere mutlak bir yol sağlar. Sunucudaki uygulamaya bağlantılar oluştururken bunları çoğunlukla e-postalarda kullandığımı fark ettim. Genellikle harici kullanım için bağlantılar sağlarken kullanılmalıdırlar. (E-posta bağlantılarını, RSS'yi ve bir YouTube videosunun "Paylaş" bölümünün altındaki URL'yi kopyalayıp yapıştırma gibi şeyleri düşünün.)


her iki cevap da hemen hemen benzer, ancak bu örnekte size doğru cevabı veriyorum "bir YouTube videosunun" Paylaş "bölümünün altındaki URL alanını kopyalayıp yapıştırın" ve @mori için zaten +1 :)
Pritesh Jain

Teşekkürler. YouTube'un yaptığına benzer bir kopyala / yapıştır "URL Paylaş" alanının olduğu bir DAM çözümü oluşturuyorum. Akla gelen ilk şeylerden biriydi.
Chris Peters

13

Kendi sitenize bir bağlantı koyduğunuzda, yolun etki alanı kısmı gereksizdir ve sayfa boyutuna eklenir, böylece URL'nin yol kısmını *_pathyardımcıyla birlikte kullanabilirsiniz. Öte yandan, URL sitenizin dışında kullanılacaksa, örneğin bir e-posta veya RSS beslemesi, URL'nin tamamı gereklidir, bu nedenle *_urlyardımcıyı kullanın .


Son zamanlarda bağlantılar ve etki alanıyla ilgili bir sorun yaşadım ve _url yardımcısı, "barındırmayla ilgili" bağlantıları değil, uygun etki alanını kullanarak bağlantı almanın tek yoluydu.
Pierre-Adrien Buisson

1
Ayrıca uygulamada bazı alt alan adları olduğunda _url helper kullanıyorum. Örneğin, abc.example.com _path adresindeki im, abc.example.com/somesection'a yönlendirirken _url doğru şekilde example.com/somesection
Wordica

10

Diğer yanıtların da açıkladığı gibi, _urle-posta bağlantılarında vb. Kullanmalısınız. Ancak _url, burada açıklandığı gibi yeniden yönlendirmelerde de kullanmanız gerektiğini eklemek isterim :

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

ve burada:

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

Ayrıca, buradan HTTP spesifikasyonunun ilgili bölümüne de bakabilirsiniz:

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


1
İlk bağlantıdan alıntı yapma (kaybolması durumunda): "Yine de denetleyicide, * _url yeniden yönlendirmek için gereklidir çünkü HTTP belirtimi, 3xx yeniden yönlendirmelerindeki Location: başlığının tam bir URL olmasını zorunlu kılar."
Terrabits

2

_path, göreli yol sağlar.

_url, mutlak yol sağlar.

E-postayla vb. Bir URL gönderdiğinizde, _path yerine _url kullanmak en iyi uygulamadır.


Olumsuz oylama, çünkü Chris Peters'ın bu yanıttan iki yıl önce zaten yanıtladığı şey buydu. Gereksiz yanıtlar yardımcı olmaz.
jeffdill2
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.