2012-01-11 88 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

相關問題