2013-11-20 20 views
1

兩個月前我開始使用rails,但我仍然喜歡它,但有一個巨大的問題。 這是關於大量使用軌道形式的哈希。鐵軌大量使用散列......需要說明

有很多可能的方法如何做到這一點,我看過很多取決於哈希的例子,但它總是另一個synstax。

寫一些像這樣

:foo => :bar 
foo: :bar 
"foo" => "bar" 

我總是將它們混合起來,得到的語法錯誤很多,有人可以給我解釋一下正確的方式該怎麼做?

這是一個符號:foo它就像"foo"一樣嗎?

另外:如果我得到一個form_tag(@something),爲什麼我必須使括號括起來,如果我想訪問HTML元素? like form_tag(@something, :html => {:foo => :bar})

有人可以解釋嗎?

感謝

+1

不是「:foo:bar」,它是「foo::bar」,相當於「:foo =>:bar」。 –

回答

4

哈希火箭=>是建立哈希原來的方式。在更高版本的Ruby中,他們引入了類似JSON的基於冒號的語法,用於鍵是符號的情況。所以:foo => :barfoo: :bar是等價的(和大衛在評論中指出上面,你在你的問題對「富」的反面結腸。)

使用=>仍然定義爲某些哈希的唯一途徑種類的鑰匙(見:Is Hash Rocket deprecated?)。所以,當你剛開始時,只需堅持=>,直到你感覺到差異爲止。

另一件可能會讓您對Rails不熟悉的問題是,ActiveSupport提供了一個名爲HashWithIndifferentAccess的對象,它將:foo"foo"作爲等效鍵。對於普通的Ruby Hash對象,情況並非如此。所以檢查你正在處理的對象的類。

而選項括在括號中的原因是因爲這是一個嵌套散列,並且使得人們可以很容易地定義像form_for這樣的方法並允許多個多值輸入。

+0

很好很容易解釋。謝謝 – user3008711