2010-02-08 13 views
8

大腦有點炸....如何從relative_path獲得:控制器和:動作的散列?在Rails中,url_for的相反之處是什麼?一個獲取路徑並生成解釋路徑的函數?

這與url_for基本相反。在下面的例子中,「some_function」是我正在尋找的神祕功能名稱......我知道這很容易,只是不記得或似乎能夠在文檔中找到它。

像這樣:

some_function('/posts/1/edit') 
=> {:controller => 'posts', :action => 'edit', :id => '1'} 
+0

是'controller.action_name'和'控制器.controller_name'足夠嗎?或者您是否真的需要從當前控制器/操作的「外部」操縱通用相對路徑? – 2010-02-08 15:40:36

+0

我做...不幸的是。不過謝謝。 – btelles 2010-02-08 15:54:07

回答

9

Rspec的有一個方法「params_for」,它使用動作控制器的路由方式與方法引入路由解析路徑。

他們的是比這多一點健壯,但它歸結爲:

def params_for(path, method) 
    params = ActionController::Routing::Routes.recognize_path(path, :method => method) 
end 
+0

當使用ActionController :: Routing :: Routes時,您可能會收到一個棄用警告 – 2012-01-25 18:45:27

+0

請提供'params_for'方法的源代碼鏈接 – zykadelic 2014-08-06 15:36:45

+1

Rails.application.routes.recognize_path'適用於Rails 3.2 – zykadelic 2014-08-06 15:44:40

8

使用Rails 3的最佳方法是使用

Rails.application.routes.recognize_path('/posts/1/edit') 
+0

Rails 4怎麼樣? – 2015-03-26 20:52:19

相關問題