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 - benchmark.rb 中的实时时间可以少于其他时间吗?

python - 如何在 Python 中包装返回位掩码的函数

html - 在 user#show 中显示收藏的食谱列表

ruby-on-rails - Heroku Slug 大小为 237MB, repo 大小为 70MB

ruby - 从 url 中删除特定部分

c - tcgetsid 与 getid 函数有何不同?

c - 在 C 中查找最新的文件名

ruby-on-rails - Prawn/PDF:一行上有多种格式/文本?

ruby-on-rails - 相当新的 Rails 开发人员对 content_tag 和助手感到困惑

使用 instance_eval 改进 Ruby