2015-08-28 27 views
1

我有以下的代碼結構:Rails的插值ACTION_NAME

<% types = [ 
    { 
     one: 'one 1', 
     two: 'two 2', 
     three: 'three 3' 
    } 
] %> 
<% result = types[:#{action_name}]%> 

<% puts result %> 

onetwothree的行動我有,我想在result變量進行插值,這樣的行爲的結果會得到根據types數組中的對象。我怎麼能做到這一點,我所做的似乎返回一個錯誤。

:#{action_name}它返回一個錯誤

回答

3

你的代碼是錯誤的語法。

修復是::"#{action_name}"。你不需要一個散列數組,只有散列就足夠了。

<% types = 
    { 
     one: 'one 1', 
     two: 'two 2', 
     three: 'three 3' 
    } 
%> 
+0

謝謝,這工作。順便說一句,數組語法'[]'和你使用的'{}'之間有什麼區別? – gespinha

+0

@GEspinha One是數組字面值,'{}'是哈希字面值。 –

+0

他們有什麼區別? – gespinha

0

如果您有散列的數組,那麼你可以訪問第一個數組元素:

types.first[:"#{action_name}"] 

或者你可以使用循環存取hash。

如果您只需要散列,那麼你應該遵循@Arup Rakshit答案。

0

有幾件事情錯了你的解決方案。

1)types = [{ one: "one1", ... }]不是散列,而是其中包含散列的數組。它看起來像你想要一個散列,所以它應該被寫爲types = { one: "one1", ... }

2)你想通過有效地做types[:one]訪問散列中的元素。要將變量插入符號中,您需要使用引號,即:"#{var}"。所以分配線應該是result = types[:"#{action_name}"]

3)看起來你是在一個模板中這樣做的,這對於任何類型的變量賦值都是一個奇怪的地方。我建議你將所有這些代碼移到一個控制器中(至少在開始時)。