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
endbuild_path
call
recognize_path
路由已经定义,请求过来如何匹配?
之前用的是正则匹配,例如 "/pictures/A12345" 可以匹配到:
引入 journey 后, 性能及其它各方面都有了很大的改善。
报错 ActionController::UrlGenerationError
当 Formatter 尝试使用 generate 将 params 传递过来的参数解析,但是解析不了的时候,就会报此错误。
最后更新于
这有帮助吗?