nil的未定义方法`[]':通过Ruby数组循环时的NilClass

时间:2012-07-06 05:23:40

标签: ruby ruby-on-rails-3

我有一个值的哈希,我试图循环以在我的视图中显示值。

哈希设置为:

{: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 0..@positions.length %>
  <%= @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]

基本上,我有两种模式:职位和经验。经验是孩子的位置。我希望获得给定位置的经验,但只能获得某些经验,例如在特定时间范围内出现的经历。最有可能采用更好的方法来解决这个问题,我不知道这一点,所以我愿意接受建议。

感谢。

1 个答案:

答案 0 :(得分:4)

似乎你有一个Postion类的对象分配给键:position 。因此,您可以通过访问者方法访问标题和城市,而不是[]

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