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.

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.


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

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

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"

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>" 

1
Terima kasih untuk spreecontohnya, Anda adalah malaikat yang jatuh dari surga.
bonafernando
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.