2015-04-29 46 views

回答

1

这可能是散列符号的问题。

红宝石1.8和以前使用这样的风格:

method(:limit => 10) 

Ruby 1.9的多最近有一个新的风格,看起来像:

method(limit: 10) 

新的符号是很多更像在Python和JavaScript等其他语言中。它们的功能相同,不过,因为你可以用irb检查它总是显示在传统的符号:

{ test: 'value' } 
# => { :test => 'value' } 

至于你的问题,以什么limit手段,它实际上取决于你传递这什么方法至。在架构定义的背景下,可以限制一个字段的大小:

t.string limit: 1024 

如果是在查询的上下文中,它可能会限制返回结果的数量。每种方法都有自己的解释,因此您需要查阅所遇到的每种方法的文档。

1

:limit是类型符号的值。您可以在Ruby文档中看到更多关于符号的信息。 http://ruby-doc.org/core-2.2.2/Symbol.html

limit:是一个语法糖,只有当这个键是一个符号时才可以用作散列键。例如:{ :limit => 10 }是传统的方式。红宝石1.9.3后,您可以重写,像有一个冒号:之前,他们的名字谴责他们是符号(唯一标识符),这意味着它是可以做到以下{ limit: 10 }

+0

谢谢,我以为它是不一样的。 – pradeek

-1

变量:

symbol = :limit 

使用冒号后的名称通常意味着表示散列键,比如下面:

hash = { limit: 5 } 
puts hash[:limit] # returns 5 

与旧版本的红宝石,其中散列写成的工作时,常常困惑随之而来如下:

hash = { :limit => 5 } 
puts hash[:limit] # returns 5 

它与上述声明具有相同的确切含义。

+0

您的示例不起作用 – dx7

+0

':limit = 5' =>'SyntaxError:(irb):21:语法错误,意外的'=',期待输入结束' – dx7

+0

'puts:limit' =>'limit ' – dx7