[英]no such file to load — rails/cli under Ruby Enterprise Edition 1.8.7
[英]Why does this work under Ruby 1.9.3 and not under 1.8.7?
我正在Rails中構建一個自定義的Form Builder,並且一直在關注這個出色的Rails Cast視頻( http://railscasts.com/episodes/311-form-builders?view=asciicast )。
瑞安使用這樣的一行:
<%= form_for @project, builder: BootstrapFormBuilder do |f| %>
但是在1.8.7下,這會發出帶有錯誤消息的炸彈。
Ruby 1.9.3中進行了哪些更改,現在可以正常工作了?
順便說一句,下面就在1.8.7工作,但為什么呢?
<%= form_for(@project, :builder => BootstrapFormBuilder) do |f| %>
Ruby 1.9.3中進行了哪些更改,現在可以正常工作了?
Hash
文字有一種新語法,其鍵是Symbol
,它們是有效的標識符。 代替
{ :foo => 'bar', :baz => 42 }
您現在也可以寫
{ foo: 'bar', baz: 42 }
此語法在1.9.0中引入。
順便說一句,以下內容在1.8.7中有效,但是為什么呢?
因為那是同一件事,所以只是使用不同的語法編寫。
哈希語法已得到擴展,允許用戶使用類似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'] }
哈希語法在Ruby 1.9中進行了更改。 在所有版本的Ruby中,您都可以使用key => value
,但是Ruby 1.9有一個新的key: value
語法。 這就是為什么您的第二個示例有效而第一個示例無效的原因。
由於這一部分:
builder: BootstrapFormBuilder
這會創建一個哈希,但是語法僅在Ruby 1.9+中允許。 之前,要創建哈希,您必須做
:builder => BootstrapFormBuilder
這就是第二行在1.8中起作用的原因。
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
仍然是一個符號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.