对于ActionDispatch::Routing::Mapper::Base
module,match
方法的定义如下:
match(path, options=nil)
我在Rails文档中发现的一件事是它没有告诉我这些参数的类型是什么。让我们看一些例子:
match ':controller/:action/:id'
此处,path
是一个字符串。
match 'songs/*category/:title' => 'songs#show'
这里是哈希。或者它仍然是一个字符串?我不确定如何解释这种语法。是吗:
{ match 'songs/*category/:title' => 'songs#show' }
其中match 'songs/*category/:title'
是关键,'songs#show'
是值?或者:
match {'songs/*category/:title' => 'songs#show'}
使用散列作为第一个参数调用match
方法?
答案 0 :(得分:1)
它是字符串或哈希。这是第二个:
match {'songs/*category/:title' => 'songs#show'}
但哈希实际上是一个参数,所以更正确的是:
match({'songs/*category/:title' => 'songs#show'})
您可以使用irb中的模拟方法自己尝试:
irb(main):005:0> def match(foo)
irb(main):006:1> puts foo
irb(main):007:1> end
=> nil
irb(main):008:0> match "somestring"
somestring
=> nil
irb(main):009:0> match :has => "hash"
{:has=>"hash"}
=> nil
答案 1 :(得分:0)
这是
中的哈希match({'songs/*category/:title' => 'songs#show'})
在最后的参数位置,您可以省略{}
。但你不能像
match {'songs/*category/:title' => 'songs#show'}
因为{}
将被解释为一个块,并且会导致语法错误而没有()
,这明确表明它是一个参数。
答案 2 :(得分:0)
对于match ':controller/:action/:id'
,`path是一个字符串。
对于match 'songs/*category/:title' => 'songs#show'
,path
是哈希:
1.9.3p125 :001 > def match(path, options=nil)
1.9.3p125 :002?> puts path
1.9.3p125 :003?> puts options
1.9.3p125 :004?> end
=> nil
1.9.3p125 :005 > match 'foo' => 'bar'
{"foo"=>"bar"}
=> nil