Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NoMethodError (undefined method `[]' for nil:NilClass)

Tags:

ruby

I have a very odd instance of this error:

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'

Whats weird is that the line 150, where it says the error is, is inside a loop and executes perfectly 11 times before it decides to error out. I am out of ideas as to why it would work fine but fail one line before what would effective be the loop where the if statement returns true.

This is the code:

  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

And this is the output before I get the error:

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

Thanks in advance for any help.

like image 669
Stewart Knapman Avatar asked May 30 '12 05:05

Stewart Knapman


2 Answers

One of your @fields elements doesnt contain Title in :field_data. Try inspecting @fields before calling @fields.each:

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

Check the server logs to see what elements you have in @fields.

like image 88
Hck Avatar answered Oct 08 '22 00:10

Hck


For that error, see also: http://mongoid.org/en/mongoid/docs/tips.html

e.g. maybe you're using MongoID and an older version of Ruby.

like image 1
Joe H Avatar answered Oct 07 '22 23:10

Joe H