我想从reqs字符串(路由项)加载create的实例方法,然后找到其源位置 这就是您在路由文件中定义的方式
get "route_name" => "controller#action"
通常,您可以使用以下语句来做到这一点
UsersController.instance_method(:create).source_location
甚至"UsersController".constantize.instance_method(:create)
我想知道是否有简单的方法可以做到这一点。 我知道我可以扩展斜线并在散列上拆分以加载实例方法,但是我相信有一种快速的方法,因为这在Rails路由中很常见
答案 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