【发布时间】:2019-08-24 12:27:23
【问题描述】:
上下文:我正在解决一个问题,我需要一个外部审计程序才能理解和“应用”Rails 路由。编写此外部程序的一种选择可能是解析rake routes 的输出,但这会不必要地重复解析这些路由并将它们转换为结构良好的Journey::Route 对象的代码。
因此,我的计划是将Rails.application.routes输出为外部程序可以理解的通用格式(YAML或JSON),并可以根据此数据构建路由器。
问题:鉴于这种情况,我试图了解Journey::Path::Paternet#spec 属性的结构,它出现在Journey::Route 对象内,并且恰好是所有操作的中心。
例如,以下路线 - /posts/:id - 被转换为以下“规范” -
#<Journey::Nodes::Cat:0x00007ff193327ee0
@left=
#<Journey::Nodes::Cat:0x00007ff193308630
@left=
#<Journey::Nodes::Cat:0x00007ff1933087e8
@left=
#<Journey::Nodes::Cat:0x00007ff193308bf8
@left=#<Journey::Nodes::Slash:0x00007ff193308d38 @left="/", @memo=nil>,
@memo=nil,
@right=#<Journey::Nodes::Literal:0x00007ff193308c48 @left="posts", @memo=nil>>,
@memo=nil,
@right=#<Journey::Nodes::Slash:0x00007ff193308a40 @left="/", @memo=nil>>,
@memo=nil,
@right=#<Journey::Nodes::Symbol:0x00007ff1933086d0 @left=":id", @memo=nil, @regexp=/[^\.\/\?]+/>>,
@memo=nil,
@right=
#<Journey::Nodes::Group:0x00007ff193309c10
@left=
#<Journey::Nodes::Cat:0x00007ff193308220
@left=#<Journey::Nodes::Dot:0x00007ff1933084f0 @left=".", @memo=nil>,
@memo=nil,
@right=#<Journey::Nodes::Symbol:0x00007ff193308338 @left=":format", @memo=nil, @regexp=/[^\.\/\?]+/>>,
@memo=nil>>
-
Journey::Nodes::Cat对象中的左/右属性是什么?是什么决定了哪个令牌是“左”,哪个令牌是“右” - 这看起来有点像二叉树,但为什么第一个标记(即第一个
/)是“最内层”(或叶节点)?不应该是“最外层”(或根节点)吗? - 在执行路线匹配时,在此数据结构中遍历此数据结构的有效方法是什么?
【问题讨论】:
标签: ruby-on-rails routes internals journey