2012-01-11 12 views
0

私はRailsでカスタムフォームビルダーを構築しています。この素晴らしいRailsキャストビデオ(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

Ruby 1。9+は、既存の ':key => value'もサポートする新しいハッシュ構文' key:value'を許可します –

答えて

5

Ruby 1.9.3で何が変更されましたか?

有効な識別子であるSymbolがあるHashリテラルの新しい構文があります。代わりに

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

のあなたは今も

{ foo: 'bar', baz: 42 } 

この構文は1.9.0で導入されましたを書くことができます。

ところで、1.8.7では次のように動作しますが、なぜですか?

これは同じことで、別の構文を使用して書かれているためです。このため、一部の

+0

偉大な答え、ありがとうございました:) –

2

ハッシュ構文が拡張され、ユーザーがJavaScriptのようなスタイルを使用できるようになりました。

# Old syntax 
old_hash = { :name => 'Ruby', :influences => ['Perl', 'Python', 'Smalltalk'] } 

# New syntax (Ruby 1.9 only) 
new_hash = { name: 'Ruby', influences: ['Perl', 'Python', 'Smalltalk'] } 

http://peepcode.com/blog/2011/rip-ruby-hash-rocket-syntax

1

ハッシュ構文は、Ruby 1.9に変更しました。 Rubyのすべてのバージョンではkey => valueを使用できますが、Ruby 1.9には新しいkey: valueという構文があります。このため、2番目の例は機能しますが、最初の例は機能しません。

1

builder: BootstrapFormBuilder 

これはハッシュを作成しますが、構文はRubyだけ1.9+で許可されています。以前は、ハッシュを作成するには、実行する必要がありました

:builder => BootstrapFormBuilder 

これは、1.8で2番目の行が機能する理由です。

1

Ruby 1.9の代替ハッシュ構文導入:a::a =>のためだけ糖衣構文であることに留意すべきである

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

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

を、それがaであることは、まだシンボルです。

+0

良い[ブログ投稿](http://logicalfriday.com/2011)/06/20/i-dont-like-the-ruby-1-9-hash-syntax /)を使用しています。 – maprihoda

関連する問題