Raylar: Yol yardımcısının konsoldan çıkışını kontrol edin


289

Raylar, rotalarınız için yardımcılar yapan adlandırılmış rotalarla bir sürü sihir tanımlar. Bazen, özellikle iç içe rotalarda, belirli bir rota yardımcı yöntem çağrısı için hangi URL'yi alacağınızı takip etmek biraz kafa karıştırıcı olabilir. Ruby konsolunu kullanarak belirli bir yardımcı fonksiyonun hangi bağlantıyı üreteceğini görmek mümkün müdür? Örneğin, post_path (post) gibi adlandırılmış bir yardımcı verildiğinde hangi URL'nin oluşturulduğunu görmek istiyorum.

Yanıtlar:


423

Onları rake routesdoğrudan gösterebilirsiniz .

Bir Rails konsolunda arayabilirsiniz app.post_path. Bu, Raylar ~ = 2.3 ve> = 3.1.0'da çalışacaktır.


7
Sadece kendi yorumumu takip ederek, bu, raylar 3 konsolundan, mümkün olması durumunda mümkün görünüyor. İlk app.get "/" olarak, artık varsayılan olarak korundukları için, istenen yöntemlere sadece instance_eval gibi bir şey çağırarak uygulama nesnenize sahte bir istek yapıştırın . app.instance_eval{ post_path(post) }
Şuna

Chubas'ın yukarıdaki yorumu Rails 3'te çalıştı. Bu testler yazarken çok kullanışlıdır, bu nedenle rotanın doğru olmadığını öğrenmek için 1 dakika beklemek zorunda değilim. Ayrıca, alma ve gönderme çağrılarını test etmek harika. Önce app.get öğesini çağırmanıza gerek yoktur.
B Seven

7
app.teh_pathRails 4.0'da hala çalışır ve motor yollarını ana uygulama yollarından ayırmak için kullanışlıdır.
nurettin

5
Örneğin mount Spree::Core::Engine, :at => '/', bir motor monte ediyorsanız , yollara motor adıyla, örneğin gibi erişirsiniz app.spree_core_engine.some_path. Veya, "motor_adı" bu koddaki gibi farklı bir şey olarak yapılandırılmışsa, bunu yaparsınız app.spree.some_path.
Jordan Brough

hostParametreyi şu şekilde eklemek zorunda kaldım :app.article_url(my_article, host: 'mydomain.com')
Besi

353

ayrıca yapabilirsin

include Rails.application.routes.url_helpers

yardımcılara erişmek için konsol oturumlarının içinden:

url_for controller: :users, only_path: true
users_path
# => '/users'

veya

Rails.application.routes.url_helpers.users_path

4
Bu yukarıdaki çözüm IMO'dan çok daha kolay
Andrew

2
bence orijinal soruya doğru cevap bu
nemesisdesign

Bu en iyi yanıt IMO olmalı
Luke

4
Bunu hatırlamak rahatsız olamaz, bu yüzden buraya kopyalamak / yapıştırmak için her birkaç günde bir geliyorum. Teşekkürler.
Spencer

1
Url_helpers gibi doğrudan konsoldan da başvuramaz Rails.application.routes.url_helpers.users_pathmısınız?
TheMadDeveloper

25

Rails konsolunda, değişken uygulaması, örnek yöntemler olarak yol ve URL yardımcılarını çağırabileceğiniz bir oturum nesnesini tutar.

app.users_path

11

path_helpersKonsolun çıkışını her zaman kontrol edebilirsiniz . Sadece yardımcıyı kullanınapp

app.post_path(3)
#=> "/posts/3"

app.posts_path
#=> "/posts"

app.posts_url
#=> "http://www.example.com/posts"

2

Rotanızın ad boşluklu olup olmadığını hatırlayın, Beğen:

product GET  /products/:id(.:format)  spree/products#show

O zaman dene :

helper.link_to("test", app.spree.product_path(Spree::Product.first), method: :get)

çıktı

Spree::Product Load (0.4ms)  SELECT  "spree_products".* FROM "spree_products"  WHERE "spree_products"."deleted_at" IS NULL  ORDER BY "spree_products"."id" ASC LIMIT 1
=> "<a data-method=\"get\" href=\"/products/this-is-the-title\">test</a>" 

1
spreeÖrnek için teşekkürler , sen gökten düşmüş bir meleğinsin.
bonafernando
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.