【问题标题】:Finding routes path from url string从 url 字符串中查找路由路径
【发布时间】:2015-10-21 19:06:12
【问题描述】:

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

比如说api_v1_user_session_path 是/api/v1/users/sign_in url 的路由

如果一个请求来自/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"}

有没有这样的方法

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

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

【问题讨论】:

  • 要取回生成路由的方法吗?
  • 我不确定这意味着什么,但我正在寻找我们从rake routes 获得的路线。我会从request 对象以url 的形式提供输入并期望输出路径。

标签: ruby-on-rails ruby api routes request


【解决方案1】:

通过更多搜索,我能够自己弄清楚。

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

【讨论】:

  • 不错的解决方案! (应该有更多的人愿意卷起袖子,在必要时深入研究框架。)
  • 应该把它做成宝石
猜你喜欢
  • 1970-01-01
  • 2017-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-31
  • 2022-11-10
  • 2014-08-23
相关资源
最近更新 更多