我正在Rails中构建一个自定义的表单生成器,我一直在关注这个优秀的Rails Cast视频(http://railscasts.com/episodes/311-form-builders?view=asciicast)。
Ryan使用这样的一行:
<%= 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 :(得分:5)
Ruby 1.9.3中发生了什么变化,使其现在有效?
Hash
文字有一种新语法,其密钥为Symbol
,是有效的标识符。而不是
{ :foo => 'bar', :baz => 42 }
您现在也可以写
{ foo: 'bar', baz: 42 }
此语法在1.9.0中引入。
顺便说一句,以下内容在1.8.7中有效,但为什么呢?
因为这是相同的事情,只是使用不同的语法编写。
答案 1 :(得分: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'] }
答案 2 :(得分:1)
Ruby 1.9中的哈希语法已更改。在所有版本的Ruby中,您都可以使用key => value
,但Ruby 1.9具有新的key: value
语法。这就是你的第二个例子有效的原因,但第一个例子没有。
答案 3 :(得分:1)
由于这一部分:
builder: BootstrapFormBuilder
这会创建一个哈希,但语法只允许在Ruby 1.9+中使用。之前,要创建哈希,您必须执行
:builder => BootstrapFormBuilder
这就是第二行在1.8中工作的原因。
答案 4 :(得分: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
仍然是符号。