2010-05-17 45 views
228

Rails定義了一系列具有命名路由的魔術,可以爲路由創建助手。有時候,特別是對於嵌套路由,它可能會有點困惑,以便跟蹤給定路由幫助方法調用的URL。是否有可能使用Ruby控制檯查看給定幫助函數將生成的鏈接?例如,給定一個像post_path(post)這樣的名字助手,我想查看生成的URL。Rails:從控制檯檢查路徑助手的輸出

回答

338

您可以直接使用rake routes向他們展示。

在Rails控制檯中,您可以撥打app.post_path。這將工作在Rails〜= 2.3和> = 3.1.0。

+7

,似乎這是有可能從軌3遊戲機的,如果你正在使用。 第一,堅持一個假的請求在您的應用對象,通過調用像 'app.get「/」' 然後就instance_eval的有用方法,因爲他們現在默認的保護。例如: 'app.instance_eval {post_path(post)}' – Chubas 2010-05-17 02:17:44

+0

上面的Chubas的註釋工作在Rails 3中。這在編寫測試時非常有用,所以我不必等待1分鐘才能發現路由是不正確。此外,測試獲得和發佈呼叫是很好的。你不需要先調用app.get。 – 2011-08-17 16:50:39

+10

'app.foo_path'似乎可以在Rails 3.1.0中使用。 – 2011-10-06 17:50:55

257

你也可以

include Rails.application.routes.url_helpers 

從控制檯會話中訪問助手:

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

這比上述解決方案要容易得多IMO – Andrew 2013-01-10 01:43:24

+2

這是對原始問題的正確答案我的意見 – nemesisdesign 2013-04-10 09:36:14

+0

這應該是最好的解決辦法IMO – 2015-02-16 15:57:30

15

在Rails的控制檯,變量應用程序保存會話對象上,你可以調用路徑URL助手作爲實例方法。

app.users_path 
1

請記住,如果您的路線是命名空間的,像:

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

您可以隨時CHEC k在控制檯中輸出path_helpers。纔剛剛在我自己的意見的後續使用助手與app

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

app.posts_path 
#=> "/posts" 

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