2012-07-06 87 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

相关问题