2012-07-06 84 views
3

我有一個哈希值,我試圖通過循環顯示我的視圖中的值。未定義的方法`[]'nil:NilClass當通過Ruby數組循環時

哈希值設置爲:

{:position=>#<Position id: 2, user_id: 1, title: "Something", city: "Denver", state: "CO", 
created_at: "2012-07-06 02:55:42", updated_at: "2012-07-06 02:55:42">, :experience=>[# 
<Experience id: 4, user_id: 1, position_id: 2, description: "Did some stuff", created_at: 
"2012-07-02 06:24:33", updated_at: "2012-07-02 06:24:33">, #<Experience id: 6, user_id: 1, 
position_id: 2, description: "Did other stuff", created_at: "2012-07-02 06:24:33", 
updated_at: "2012-07-02 06:24:33">]} 

它是通過採取ActiveRecord的結果,並將其插入到哈希創建(如果您想了解更多的細節,我很高興地添加的話)。

在我看來,我是通過哈希嘗試循環:

<% for i in [email protected] %> 
    <%= @positions[i][:position][:title] %> 
    <%= @positions[i][:position][:city] %> 
<% end %> 

當我在瀏覽器中打開它,我得到一個錯誤undefined method '[]' for nil:NilClass。如果我僅使用@positions[i],它將轉儲出原始散列(第一個,然後第二個等等)。當我添加[:position]時,它不起作用。我可以使用@positions[0][:position][:title]訪問控制檯中的值。當我嘗試在控制檯中寫入循環時,出現同樣的錯誤。

我知道i正在計數,因爲我可以讓它在瀏覽器中顯示值,並且它工作正常。

我嘗試過使用@positions.each do |job|,但遇到同樣的錯誤。我嘗試在其他地方添加另一個索引:@positions[i][:position][0]

基本上,我有兩個模型:位置和經驗。經驗是一個立場的孩子。我想獲得給定職位的經驗,但只能獲得特定經歷,例如在特定時間範圍內發生的經歷。這很可能是一種更好的方法,我只是不知道,所以我願意接受建議。

謝謝。

回答

4

看起來你有一個Postion類的對象被分配給密鑰:位置。因此,您可以通過訪問方法訪問標題和城市,而不是使用[]

<% @positions.each do |job| %> 
    <%= job[:position].title %> 
    <%= job[:position].city %> 
<% end %> 
+0

完美的工作!非常感謝! – 2012-07-07 12:50:07

相關問題