2012-01-11 70 views
0

我在Rails中构建了一个自定义Form Builder,我一直在关注这个伟大的Rails Cast视频(http://railscasts.com/episodes/311-form-builders?view=asciicast)。为什么在Ruby 1.9.3下而不是1.8.7下工作?

瑞恩使用这样一行:

<%= form_for @project, builder: BootstrapFormBuilder do |f| %> 

但在1.8.7这个炸弹了一个神秘的错误消息。

Ruby 1.9.3中有哪些变化使得它现在可以工作?

顺便说一句,以下确实工作在1.8.7,但为什么?

<%= form_for(@project, :builder => BootstrapFormBuilder) do |f| %> 
+0

红宝石1。9+允许新的哈希语法'key:value'也支持现有的':key =>值' – 2012-01-11 18:32:01

回答

5

Ruby 1.9.3中改变了什么使它现在可以工作?

Hash文字的新语法的键是Symbol s是有效的标识符。取而代之的

{ :foo => 'bar', :baz => 42 } 

现在您还可以写

{ foo: 'bar', baz: 42 } 

这句法在1.9.0介绍。

顺便说一句,以下在1.8.7中工作,但为什么?

因为这是相同的事情,只是使用不同的语法编写。

+0

很好的答案,谢谢:) – 2012-01-11 18:58:47

1

哈希语法Ruby 1.9的改变。在所有版本的Ruby中,您都可以使用key => value,但Ruby 1.9具有新的key: value语法。这就是为什么你的第二个例子有效,但第一个不行。

1

因为这部分的:

builder: BootstrapFormBuilder 

这将创建一个哈希,但语法只允许在Ruby中1.9+。之前,要创建一个哈希,你必须做

:builder => BootstrapFormBuilder 

这就是为什么第二行工作在1.8。

1

的Ruby 1.9引入了一个备选哈希语法:

# Ruby 1.8 and 1.9 
h = { :a => 1, :b => 2 } 

# Ruby 1.9 only 
h = { a: 1, b: 2 } 

应当指出的是,a:仅仅是:a =>一个语法糖,就是a仍然是一个符号。

+0

还有一个不错的[博客文章](http://logicalfriday.com/2011/06/20/i-dont-like-the-ruby-1-9-hash-syntax /)作者不喜欢新的语法,并给出了很好的论点 – maprihoda 2012-01-11 18:39:18

相关问题