Rails: ตรวจสอบเอาต์พุตของตัวช่วยพา ธ จากคอนโซล


289

Rails กำหนดเส้นทางแห่งเวทมนตร์ด้วยเส้นทางที่มีชื่อซึ่งจะช่วยให้เส้นทางของคุณ บางครั้งโดยเฉพาะอย่างยิ่งกับเส้นทางที่ซ้อนกันอาจมีความสับสนเล็กน้อยในการติดตามว่าคุณจะได้รับ URL ใดสำหรับการเรียกใช้เมธอดตัวช่วยเส้นทาง เป็นไปได้ไหมที่จะใช้คอนโซล Ruby ดูว่าลิงก์ใดที่ฟังก์ชันตัวช่วยที่กำหนดจะสร้างขึ้น ตัวอย่างเช่นกำหนดผู้ช่วยที่มีชื่อเช่น post_path (โพสต์) ฉันต้องการดู URL ที่สร้างขึ้น

คำตอบ:


423

คุณสามารถแสดงพวกเขาด้วยrake routesโดยตรง

ในคอนโซล Rails คุณสามารถโทรapp.post_pathได้ สิ่งนี้จะทำงานใน Rails ~ = 2.3 และ> = 3.1.0


7
ในการติดตามความคิดเห็นของฉันเองดูเหมือนว่านี่เป็นไปได้จากคอนโซล rails 3 ในกรณีที่คุณกำลังใช้งาน ก่อนอื่นติดคำขอปลอมในวัตถุแอปของคุณโดยเรียกบางอย่างเช่น app.get "/" instance_eval วิธีการที่ต้องการเนื่องจากตอนนี้ได้รับการป้องกันโดยค่าเริ่มต้น สิ่งที่ต้องการ: app.instance_eval{ post_path(post) }
Chubas

ความคิดเห็นของ Chubas ด้านบนทำงานใน Rails 3 ซึ่งมีประโยชน์มากเมื่อเขียนการทดสอบดังนั้นฉันไม่ต้องรอ 1 นาทีเพื่อค้นหาว่าเส้นทางไม่ถูกต้อง นอกจากนี้ยังเป็นการทดสอบที่ดีสำหรับการโทรออกและโพสต์ คุณไม่จำเป็นต้องโทรไปที่ app.get ก่อน
B เซเว่น

7
app.teh_pathยังคงใช้งานได้ใน Rails 4.0 และมีประโยชน์สำหรับการแยกพา ธ ของเครื่องยนต์ออกจากแอพพลิเคชั่นหลัก
นูเรตอิน

5
หากคุณกำลังติดตั้งเครื่องยนต์เช่นนั้นคุณต้องการเข้าถึงเส้นทางผ่านชื่อเครื่องยนต์เช่นmount Spree::Core::Engine, :at => '/' app.spree_core_engine.some_pathหรือถ้า "ENGINE_NAME" การกำหนดค่าให้เป็นสิ่งที่แตกต่างกันเช่นในรหัสนี้app.spree.some_pathแล้วคุณจะทำยังไง
Jordan Brough

ฉันต้องเพิ่มhostพารามิเตอร์ดังนี้:app.article_url(my_article, host: 'mydomain.com')
เบซิ

353

นอกจากนี้คุณยังสามารถ

include Rails.application.routes.url_helpers

จากภายในเซสชันคอนโซลเพื่อเข้าถึงผู้ช่วยเหลือ:

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

หรือ

Rails.application.routes.url_helpers.users_path

4
นี่ง่ายกว่า IMO ของโซลูชันด้านบน
Andrew

2
นี่คือคำตอบที่ถูกต้องสำหรับคำถามต้นฉบับในความคิดของฉัน
nemesisdesign

นี่ควรเป็นคำตอบที่ดีที่สุด IMO
ลุค

4
ฉันไม่สามารถจำได้ดังนั้นฉันเพิ่งกลับมาที่นี่ทุกสองสามวันเพื่อคัดลอก / วาง ขอบคุณ
Spencer

1
คุณไม่สามารถอ้างอิง url_helpers โดยตรงจากคอนโซลได้Rails.application.routes.url_helpers.users_pathไหม
TheMadDeveloper

25

ในคอนโซล Rails แอปตัวแปรเก็บวัตถุเซสชันซึ่งคุณสามารถเรียกใช้เส้นทางและตัวช่วย URL เป็นวิธีการอินสแตนซ์

app.users_path

11

คุณสามารถตรวจสอบผลลัพธ์ของpath_helpersในคอนโซลได้ตลอดเวลา เพียงใช้ผู้ช่วยด้วยapp

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

app.posts_path
#=> "/posts"

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

2

โปรดจำไว้ว่าเส้นทางของคุณเป็นชื่อเว้นระยะเช่น:

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

จากนั้นลอง:

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

เอาท์พุต

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ตัวอย่างคุณเป็นนางฟ้าที่ตกลงมาจากสวรรค์
bonafernando
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.