如何从reqs字符串(如“ controller#action”)中加载控制器方法

时间:2018-07-10 16:27:10

标签: ruby-on-rails rails-routing

我想从reqs字符串(路由项)加载create的实例方法,然后找到其源位置 这就是您在路由文件中定义的方式

get "route_name" => "controller#action"

通常,您可以使用以下语句来做到这一点

UsersController.instance_method(:create).source_location 甚至"UsersController".constantize.instance_method(:create)

我想知道是否有简单的方法可以做到这一点。 我知道我可以扩展斜线并在散列上拆分以加载实例方法,但是我相信有一种快速的方法,因为这在Rails路由中很常见

2 个答案:

答案 0 :(得分:0)

这项工作(将find_path更改为您要查找的任何路径)会

find_path = '/'
controller_name = Rails.application.routes.recognize_path(find_path)[:controller]
controller_class = (controller_name + '_controller').classify.constantize
controller_class.instance_method(:create).source_location

我不知道您是否喜欢解析route.rb文件。否则,您可以使用以下方法获取所有应用程序路由的列表:Method: ActionDispatch::Routing::RouteSet#named_routes

让我知道我是否误会了。

答案 1 :(得分:0)

所以我最终使用了以下代码:

execution_path= "api/v1/users_controller#action"
controller,action = execution_path.split("#")
controller = controller + "_controller"
controller_class = controller.camelize.constantize
source_code = controller_class.instance_method(action).source_location
相关问题