Rails: Periksa output path helper dari konsol

288

Rails mendefinisikan sekelompok sihir dengan rute bernama yang membuat helper untuk rute Anda. Terkadang, terutama dengan rute bersarang, bisa sedikit membingungkan untuk melacak URL apa yang akan Anda dapatkan untuk panggilan metode pembantu rute yang diberikan. Apakah mungkin, menggunakan konsol Ruby, melihat tautan apa yang akan dihasilkan oleh fungsi pembantu? Misalnya, diberi penolong bernama seperti post_path (posting) saya ingin melihat URL apa yang dihasilkan.

Derek Thurn
sumber

Jawaban:

422

Anda dapat menunjukkannya rake routessecara langsung.

Di konsol Rails, Anda dapat menelepon app.post_path. Ini akan bekerja di Rails ~ = 2.3 dan> = 3.1.0.

Chubas
sumber
7
Hanya dalam tindak lanjut dari komentar saya sendiri, sepertinya ini mungkin dari konsol rails 3, jika Anda menggunakan Pertama, masukkan permintaan palsu ke objek aplikasi Anda, dengan memanggil sesuatu seperti app.get "/" kemudian hanya instance_eval metode yang diinginkan, karena mereka sekarang dilindungi secara default. Sesuatu seperti: app.instance_eval{ post_path(post) }
Chubas
Komentar Chubas di atas bekerja di Rails 3. Ini sangat berguna ketika menulis tes jadi saya tidak perlu menunggu 1 menit untuk mengetahui bahwa rute itu tidak benar. Juga, sangat bagus untuk menguji mendapatkan dan memposting panggilan. Anda tidak perlu memanggil app.get dulu.
B Seven
7
app.teh_pathmasih berfungsi di Rails 4.0 dan berguna untuk memisahkan jalur engine dari jalur aplikasi utama.
nurettin
5
Jika Anda memasang mesin, misalnya mount Spree::Core::Engine, :at => '/', maka Anda akan mengakses jalur melalui nama mesin, seperti app.spree_core_engine.some_path. Atau, jika "engine_name" dikonfigurasi menjadi sesuatu yang berbeda seperti dalam kode ini, maka Anda akan melakukannya app.spree.some_path.
Jordan Brough
Saya harus menambahkan hostparameter seperti ini:app.article_url(my_article, host: 'mydomain.com')
Besi
352

Anda juga bisa

include Rails.application.routes.url_helpers

dari dalam sesi konsol untuk mengakses bantuan:

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

atau

Rails.application.routes.url_helpers.users_path
Aghull
sumber
4
Ini jauh lebih mudah daripada solusi IMO di atas
Andrew
2
ini jawaban yang tepat untuk pertanyaan awal menurut saya
nemesisdesign
Ini seharusnya jawaban terbaik IMO
Luke
4
Saya tidak dapat repot mengingat ini, jadi saya kembali ke sini setiap beberapa hari untuk menyalin / menempel. Terima kasih.
Spencer
1
Tidak bisakah Anda juga mereferensikan url_helpers langsung dari konsol, seperti Rails.application.routes.url_helpers.users_path?
TheMadDeveloper
25

Di konsol Rails, aplikasi variabel menyimpan objek sesi tempat Anda dapat memanggil path dan URL helpers sebagai metode instan.

app.users_path
pengguna3622458
sumber
11

Anda selalu dapat memeriksa output path_helpersdi konsol. Cukup gunakan helper denganapp

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

app.posts_path
#=> "/posts"

app.posts_url
#=> "http://www.example.com/posts"
Deepak Mahakale
sumber
2

Ingat jika rute Anda diberi spasi nama, Suka:

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

Lalu coba:

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

keluaran

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>" 
Arup Rakshit
sumber
1
Terima kasih untuk spreecontohnya, Anda adalah malaikat yang jatuh dari surga.
bonafernando