Journey

路由生成、解析底层实现

重要组成部分有:

  • Routes

  • Router

  • Formatter

RouteSet 里调用到它的几个方法:

initialize

module ActionDispatch
  module Routing
    class RouteSet
      attr_accessor :formatter, :set, :named_routes, :default_scope, :router
      attr_accessor :disable_clear_and_finalize, :resources_path_names
      attr_accessor :default_url_options, :request_class

      alias :routes :set

      def initialize(request_class = ActionDispatch::Request)
        self.named_routes         = NamedRouteCollection.new
        self.resources_path_names = self.class.default_resources_path_names
        self.default_url_options  = {}
        self.request_class        = request_class

        @append                     = []
        @prepend                    = []
        @disable_clear_and_finalize = false
        @finalized                  = false

        @set       = Journey::Routes.new
        @router    = Journey::Router.new @set
        @formatter = Journey::Formatter.new @set
      end
    end
  end
end

build_path

call

recognize_path

路由已经定义,请求过来如何匹配?

之前用的是正则匹配,例如 "/pictures/A12345" 可以匹配到:

引入 journey 后, 性能及其它各方面都有了很大的改善。

报错 ActionController::UrlGenerationError

当 Formatter 尝试使用 generateparams 传递过来的参数解析,但是解析不了的时候,就会报此错误。

最后更新于

这有帮助吗?