鉴于此映射定义:
/order/:meal/:cheese
将此字符串解析/order/hamburger/american
为{meal:'hamburger', cheese:'american'}
.
我正在研究 Journey 的内部结构,试图弄清楚这是否可能在 Rails 之外。还有其他 SO 问题展示了如何在 Rails 中使用识别路径。而且我知道您可以使用正则表达式或拆分轻松完成此操作,但我想要免费的额外解析功能(如 :format 等)。
这是可行的。只是想知道是否有人有改进。我基本上是在压缩/组合旅程匹配的两个部分(名称和捕获)以制作匹配哈希(如识别路径)。只是想知道是否有人已经进入 Journey 并尝试做同样的事情。
require 'journey'
def hashify_match matches
h = {}
matches.names.each_with_index do |key, i|
h[key.to_sym] = matches.captures[i]
end
h
end
pattern = Journey::Path::Pattern.new '/order/(:meal(/:cheese))'
matches = pattern.match '/order/hamburger/american'
puts hashify_match matches
matches = pattern.match '/order/hotdog/cheddar'
puts hashify_match matches
这是打印出来的。
{:meal=>"hamburger", :cheese=>"american"}
{:meal=>"hotdog", :cheese=>"cheddar"}
我可以使用 Journey 的另一部分来构建匹配哈希吗?看,matches.names
确实matches.captures
是 Array 对象,这感觉就像是 hack。当然,Rails 的某些部分在某个时候将这些组合在一起。
请注意,仅使用 Journey gem(包含在 Rails 3.2.0+ 中)。