2010-02-08 39 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

相关问题