2010-08-16 75 views
0

你好,我有以下問題。通過軌道上的紅寶石變量訪問哈希

我充滿了HTML參數(PARAMS)哈希:

Parameters: "info"=>{"parameter2"=>{"r1"=>"aa", "r2"=>"bb", "r3"=>"cc", "r4"=>"dd", "r5"=>"ee"} 

你可以訪問此值是這樣的:

<%= params[:info][:parameter2][:r1] %> - >它工作正常

但是我有一個循環,並希望通過如下變量訪問這些值:

<% for number_row in ([email protected]_rows) %> 

<%= params[:info][:parameter2]["r" + number_row.to_s] %> 

<% end %> 

- >它沒有工作。 我總是得到這個錯誤:

can't convert nil into String

但 「R1」 確實存在。爲什麼總是說,它不能將nil轉換爲String。

我如何使用變化的變量訪問這些參數?

我需要的是這樣的:PARAMS [:信息] [:參數2] [@ VAR]

回答

2

聽起來非常不紅寶石。嘗試

params[:info][:parameter2].each do |key, value| 

...

+0

的問題是,在這個需要在另一個循環,而我只需要從這個哈希 – wabbiti 2010-08-16 15:42:06

+0

一個值'value'是迭代的當前值。你到底想做什麼? – Reactormonk 2010-08-16 15:44:43

+0

是的值是迭代的當前值。我想從該散列獲取鍵值。問題在於Nate Pinchot解釋了什麼(參見下一個答案)。 – wabbiti 2010-08-16 16:20:19

6

在Ruby中,事情在它前面一個冒號是Symbol。您收到的錯誤是正確的,因爲您正在引用「r1」,而不是:r1。

您需要使用to_symString製作Symbol

n = "r" + number_row.to_s 
params[:info][:parameter2][n.to_sym] 
+0

我正在尋找這樣的東西。謝謝。 但不幸的是,我得到了同樣的錯誤:不能將零轉換爲字符串 不知何故它不接受變量: n =「r」+「1」 - >它的工作原理,它可以轉換成符號 n =「r」+ number_row.to_s - >比他無法將其轉換爲符號 – wabbiti 2010-08-16 16:16:40

+0

對不起,我忘記了'number_row'上的'.to_s'。以下是irb的測試http://i.imgur.com/JYMTV.png – 2010-08-16 16:28:10

+0

謝謝! idk如果這是正確的做法,但幫了我很多 – 2014-06-27 16:38:26

0

試試這個方法!

<% params[:info][:parameter2].keys do |key| %> 

<%= params[:info][:parameter2][key] %> 

<% end %> 
0

這個工作對我來說:

1.upto(@numb_rows).each do |i| 
    puts params['info']['parameter2']["r#{i}"]} 
end 
+0

是的,這個工作,如果你改變這個: 1。直到(@ numb_rows-1){| i | puts params [:info] [:parameter2] [「r#{i.to_s}」]} Thx很多。 – wabbiti 2010-08-18 15:31:41

+0

很高興幫助。順便說一句,Ruby會隱式地將整數轉換爲一個字符串。您不必致電to_s。你真的想要抵消@numb_rows由-1?這將排除最後一行(r5),對嗎? – 2010-08-18 20:22:44

+0

我在那裏有一個錯誤,因爲範圍太大了。比我測試,如果它是工作,如果@numb_rows最大數量是減1。然後它運行良好。 但主要的是,你的代碼適合我:)。非常感謝 !! – wabbiti 2010-08-20 14:05:51