从url字符串中查找路径路径

Ash*_*ala 7 ruby api routes ruby-on-rails request

我想知道api请求的路由是什么.

让我们说例如api_v1_user_session_path是/api/v1/users/sign_inurl 的路由

如果请求来自/api/v1/users/sign_in我如何找出路线是什么.在这种情况下,它应该是api_v1_user_session_path

我尝试了下面的声明,但它给出了控制器和动作但不是路线.

Rails.application.routes.recognize_path('/api/v1/users/sign_in')
=> {:controller=>"api/v1/sessions", :action=>"new"}
Run Code Online (Sandbox Code Playgroud)

有没有像这样的方法

Rails.application.routes.get_route('/api/v1/users/sign_in')
=> api_v1_user_session
Run Code Online (Sandbox Code Playgroud)

如何从URL或request对象获取此路由.

Ash*_*ala 6

通过更多搜索,我能够自己解决这个问题.

class StringToRoute

  attr_reader :request, :url, :verb

  def initialize(request)
    @request = request
    @url = request.original_fullpath
    @verb = request.request_method.downcase
  end

  def routes
    Rails.application.routes.routes.to_a
  end

  def recognize_path
    Rails.application.routes.recognize_path(url, method: get_verb)
  end

  def process
    _recognize_path = recognize_path
     routes.select do |hash|
       if hash.defaults == _recognize_path
         hash
       end
     end
  end

  def get_verb
    verb.to_sym
  end

  def path
    "#{verb}_#{process.name}"
  end
end
Run Code Online (Sandbox Code Playgroud)

结果:

StringToRoute.new(request).path

  • 应该把它变成宝石 (2认同)