ruby-on-rails - 从 url 字符串中查找路由路径

标签 ruby-on-rails ruby api routes request

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

比方说 api_v1_user_session_path 是 /api/v1/users/sign_in url 的路径

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

我尝试了下面的语句,但它提供了 Controller 和操作,但没有提供路由。

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

有没有这样的方法

Rails.application.routes.get_route('/api/v1/users/sign_in')
=> api_v1_user_session

如何从 url 或 request 对象中获取此路由。

最佳答案

通过更多搜索,我能够自己弄明白。

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

结果:

StringToRoute.new(request).path

关于ruby-on-rails - 从 url 字符串中查找路由路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33267281/

相关文章:

ruby-on-rails - 在 Rails 4 中检测用户代理 - 读取 HTTP header

jquery - 带有 Rails 的 format.js

php - Magento 最小订购量 api

ruby - 如何在测试中用模拟可执行文件替换可执行文件?

scala - 在 IntelliJ 中链接到外部 Scala API 文档

C++套接字流api

ruby-on-rails - 使用 Rails 5 和 Carrierwave 远程上传图像

javascript - jQuery 从 <a href 'Click Me' >Click Me</a> 中提取 ="http://example.com"

ruby-on-rails - elasticsearch中的批量数据删除

ruby - RSpec 是否有可能期望两个表发生变化?