2012-07-06 4 views
3

У меня есть хэш значений, которые я пытаюсь просмотреть, чтобы отобразить значения на моем представлении.undefined method `[] 'for nil: NilClass Когда Looping Through Ruby Array

Хэш устанавливается как:

{: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

Это сработало отлично! Спасибо! –

Смежные вопросы