Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 仅使用旅程的Rails样式路由字符串解析_Ruby On Rails_Ruby_Journey - Fatal编程技术网

Ruby on rails 仅使用旅程的Rails样式路由字符串解析

Ruby on rails 仅使用旅程的Rails样式路由字符串解析,ruby-on-rails,ruby,journey,Ruby On Rails,Ruby,Journey,给定此映射定义: /order/:mean/:cheese 将此字符串/order/hamburger/american解析为{me饭:'hamburger',奶酪:'american'} 我在玩Travely的内部构件,试图弄清楚这在rails之外是否可行。还有其他一些问题显示了如何在Rails中使用recognize_path实现这一点。我知道你可以很容易地用正则表达式或拆分来完成这一点,但我希望额外的解析功能是免费的(比如:格式等) 这里有一些有效的方法。只是想知道是否有人有改进。我基本上

给定此映射定义:
/order/:mean/:cheese

将此字符串
/order/hamburger/american
解析为
{me饭:'hamburger',奶酪:'american'}

我在玩Travely的内部构件,试图弄清楚这在rails之外是否可行。还有其他一些问题显示了如何在Rails中使用recognize_path实现这一点。我知道你可以很容易地用正则表达式或拆分来完成这一点,但我希望额外的解析功能是免费的(比如:格式等)

这里有一些有效的方法。只是想知道是否有人有改进。我基本上是压缩/组合旅程匹配的两部分(名称和捕获),以生成匹配哈希(比如识别路径)。只是想知道是否有人进入了旅程,并试图做同样的事情

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"}
我是否还可以使用旅程的另一部分来构建匹配哈希?请参阅,
匹配。名称
匹配。捕获
实际上是数组对象,这感觉像是黑客攻击。当然,Rails的某些部分会在某个时候将这些元素组合在一起

请注意,只使用了旅程gem(包含在Rails 3.2.0+中)。


所以看起来似乎没有一种方便的方法来做你想做的事情。

是的,我想没有。谢谢
    match_data  = r.path.match(req.path_info)
    match_names = match_data.names.map { |n| n.to_sym }
    match_values = match_data.captures.map { |v| v && Utils.unescape_uri(v) }
    info = Hash[match_names.zip(match_values).find_all { |_,y| y }]