Rails: Kiểm tra đầu ra của trình trợ giúp đường dẫn từ bàn điều khiển


288

Rails định nghĩa một loạt các phép thuật với các tuyến đường được đặt tên giúp người trợ giúp cho các tuyến đường của bạn. Đôi khi, đặc biệt là với các tuyến đường lồng nhau, có thể hơi khó hiểu khi theo dõi URL nào bạn sẽ nhận được cho một cuộc gọi phương thức trợ giúp tuyến đường cụ thể. Có thể, bằng cách sử dụng bảng điều khiển Ruby, xem liên kết nào mà hàm trợ giúp đã cho sẽ tạo ra? Ví dụ: được cung cấp một trình trợ giúp có tên như post_path (bài đăng) Tôi muốn xem URL nào được tạo.

Câu trả lời:


422

Bạn có thể chỉ cho họ rake routestrực tiếp.

Trong bảng điều khiển Rails, bạn có thể gọi app.post_path. Điều này sẽ hoạt động trong Rails ~ = 2.3 và> = 3.1.0.


7
Chỉ cần theo dõi nhận xét của riêng tôi, dường như điều này là có thể từ bảng điều khiển rails 3, trong trường hợp bạn đang sử dụng. Đầu tiên, hãy gắn một yêu cầu giả mạo vào đối tượng ứng dụng của bạn, bằng cách gọi một cái gì đó giống như app.get "/" sau đó chỉ là instance_eval các phương thức mong muốn, vì chúng hiện được bảo vệ theo mặc định. Một cái gì đó như: app.instance_eval{ post_path(post) }
Chubas

Nhận xét của Chubas ở trên đã hoạt động trong Rails 3. Điều này rất hữu ích khi viết bài kiểm tra vì vậy tôi không phải đợi 1 phút để biết rằng tuyến đường không chính xác. Ngoài ra, nó là tuyệt vời để kiểm tra nhận và gửi cuộc gọi. Bạn không cần gọi app.get trước.
B Bảy

7
app.teh_pathvẫn hoạt động trong Rails 4.0 và rất hữu ích để tách các đường dẫn động cơ khỏi các đường dẫn ứng dụng chính.
Nurettin

5
Nếu bạn đang lắp một động cơ, ví dụ: mount Spree::Core::Engine, :at => '/'thì bạn sẽ truy cập các đường dẫn thông qua tên động cơ, như thế nào app.spree_core_engine.some_path. Hoặc, nếu "engine_name" được cấu hình thành một cái gì đó khác như trong mã này thì bạn sẽ làm app.spree.some_path.
Jordan B thông qua

Tôi đã phải thêm hosttham số như vậy:app.article_url(my_article, host: 'mydomain.com')
Besi

352

bạn cũng có thể

include Rails.application.routes.url_helpers

từ bên trong phiên giao diện điều khiển để truy cập người trợ giúp:

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

hoặc là

Rails.application.routes.url_helpers.users_path

4
Điều này dễ hơn nhiều so với giải pháp trên IMO
Andrew

2
Theo tôi, đây là câu trả lời đúng cho câu hỏi ban đầu
nemesisdesign

Đây phải là câu trả lời tốt nhất IMO
Luke

4
Tôi không thể bận tâm để nhớ điều này, vì vậy tôi chỉ quay lại đây vài ngày để sao chép / dán. Cảm ơn.
Spencer

1
Bạn cũng không thể tham khảo url_helpers trực tiếp từ bảng điều khiển, như thế Rails.application.routes.url_helpers.users_pathnào?
TheMadDeveloper

25

Trong bảng điều khiển Rails, ứng dụng biến giữ một đối tượng phiên mà bạn có thể gọi đường dẫn và trình trợ giúp URL làm phương thức ví dụ.

app.users_path

11

Bạn luôn có thể kiểm tra đầu ra của path_helperstrong giao diện điều khiển. Chỉ cần sử dụng trợ giúp vớiapp

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

app.posts_path
#=> "/posts"

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

2

Hãy nhớ nếu tuyến đường của bạn được đặt tên, như:

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

Vậy hãy thử đi :

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

đầu ra

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
Cảm ơn spreeví dụ, bạn là một thiên thần từ trời rơi xuống.
bonafernando
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.