2

对于ActionDispatch::Routing::Mapper::Basemodulematch方法定义如下:

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使用哈希作为第一个参数调用该方法?

4

3 回答 3

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
于 2013-04-26T08:26:15.887 回答
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 
于 2013-04-26T08:26:25.110 回答
0

它是一个哈希,如

match({'songs/*category/:title' => 'songs#show'})

在最后的参数位置,您可以省略{}. 但你不能这样写

match {'songs/*category/:title' => 'songs#show'}

因为{}将被解释为一个块,并且会导致没有 的语法错误(),这明确表明它是一个参数。

于 2013-04-26T08:25:48.320 回答