Вопрос по ruby – NoMethodError (неопределенный метод `[] 'для nil: NilClass)

7

У меня есть очень странный случай этой ошибки:

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

Заранее благодарю за любую помощь.

Возможный дубликатHow to avoid NoMethodError for missing elements in nested hashes, without repeated nil checks? user513951

Ваш Ответ

2   ответа
1

http://mongoid.org/en/mongoid/docs/tips.html

e.g. возможно, вы используете MongoID и более старую версию Ruby.

4

Попробуйте проверить @fields перед вызовом@fields.each:

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

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

Да это было это. По какой-то причине выходные данные были сегментированы и вышли из строя, но после их объединения они показали: field_data = & gt; ноль. Спасибо за вашу помощь. Stewart Knapman

Похожие вопросы