2012-05-30 3 views
7

У меня очень странное экземпляр этой ошибки:NoMethodError (неопределенный метод `[]» для ноль: NilClass)

NoMethodError (undefined method `[]' for nil:NilClass): 
app/controllers/main_controller.rb:150:in `block in find_data_label' 
app/controllers/main_controller.rb:149:in `each' 
app/controllers/main_controller.rb:149:in `find_data_label' 
app/controllers/main_controller.rb:125:in `data_string' 
app/controllers/main_controller.rb:35:in `catch' 

Что странно, что линия 150, где он говорит ошибка, находится внутри цикл и выполняется отлично 11 раз, прежде чем он решит об ошибке. Я не в курсе, почему это будет работать нормально, но не сработает одна строка до того, что будет эффективным, это цикл, в котором оператор if возвращает true.

Это код:

def find_data_label(label) 
    @fields.each do |f| 
     puts "f[:field_data]['Title'] = #{f[:field_data]['Title']}" # <--- line 150 
     if f[:field_data]['Title'] == label 
     return f 
     end 
    end 
    end 

И это выход, прежде чем я получаю сообщение об ошибке:

f[:field_data]['Title'] = Name 
f[:field_data]['Title'] = Name 
f[:field_data]['Title'] = Mobile number 
f[:field_data]['Title'] = Email 
f[:field_data]['Title'] = Date of birth 
f[:field_data]['Title'] = Gender 
f[:field_data]['Title'] = Street name 
f[:field_data]['Title'] = Street number 
f[:field_data]['Title'] = My local Puckles store is in 
f[:field_data]['Title'] = Suburb 
f[:field_data]['Title'] = Postcode 
Completed 500 Internal Server Error in 2047ms 

Спасибо заранее за любую помощь.

ответ

4

Один из ваших элементов @fields не содержит Title in: field_data. Попробуйте проверки @fields перед вызовом @fields.each:

Rails.logger.warn '-'*40 
Rails.logger.warn @fields.inspect 

Проверьте журналы сервера, чтобы увидеть, какие элементы вы имеете в @fields.

+0

Yup that was it. По какой-то причине выход был сегментирован и вышел из строя, но после его сборки он показал: field_data => nil. Спасибо за вашу помощь. –

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