Nil Object where you didn't expect it

So I generate a scaffold with Rails 2.1.0 with a number of database fields.

item:string accession_number:text description:text designer:string classification:string overall_dimensions:string auxiliary_parts:string overall_condition:string condition_description:text picture:binary accession_date:datetime provenance:text manufacturer:string design_date:string construction_date:datetime material_surface_finish:string medium_technique:string identification_markings:string picture2:binary recommendations:string exhibition_record:string conservation_record:string bibliography:text dimensions:string notes:text class:string old_box_numbers:string other_identification_numbers:string inventory_date:datetime inventory_recorded_by:string other_source_location_information:text other_location_information:text location:text box_number:integer collector:string collector_or_donor:string archaeological_site_name:string archaeology_site_number:string geographical_region:string picture1desc:text picture2desc:text insurance_appraisal:string

And when I go to the scaffold new view, it tells me I have a nill object where I didn't expect it. Normally, this happens when I haven't specified the id of an Active Record object properly so the Controller doesn't give the View a specific active Record object to play with.

But in this case the model is simply Entry and my controller code is simply @entry=Entry.new. I can't see where that wouldn't give it an object to play with?

Ron

So I generate a scaffold with Rails 2.1.0 with a number of database fields.

item:string accession_number:text description:text designer:string classification:string overall_dimensions:string auxiliary_parts:string overall_condition:string condition_description:text picture:binary accession_date:datetime provenance:text manufacturer:string design_date:string construction_date:datetime material_surface_finish:string medium_technique:string identification_markings:string picture2:binary recommendations:string exhibition_record:string conservation_record:string bibliography:text dimensions:string notes:text class:string old_box_numbers:string

OK, this is more of a wild guess than anything, but could your column 'class' be a problem? If not, you probably have to look at the link in your view where the error is thrown.

other_identification_numbers:string inventory_date:datetime inventory_recorded_by:string other_source_location_information:text other_location_information:text location:text box_number:integer collector:string collector_or_donor:string archaeological_site_name:string archaeology_site_number:string geographical_region:string picture1desc:text picture2desc:text insurance_appraisal:string

And when I go to the scaffold new view, it tells me I have a nill object where I didn't expect it. Normally, this happens when I haven't specified the id of an Active Record object properly so the Controller doesn't give the View a specific active Record object to play with.

But in this case the model is simply Entry and my controller code is simply @entry=Entry.new. I can't see where that wouldn't give it an object to play with?

Ron

Rob Biedenharn http://agileconsultingllc.com Rob@AgileConsultingLLC.com

Hi Rob,

So I tried changing class to type, without any success. I checked the development log and found the following entry: ActionView::TemplateError (You have a nil object when you didn't expect it! The error occurred while evaluating nil.generated_methods) on line #8 of entries/new.html.erb: 5: 6: <p> 7: <%= f.label :dimensions %><br /> 8: <%= f.text_field :dimensions %> 9: </p> 10: <p> 11: <%= f.label :cultural_affiliation %><br />

    /Library/Ruby/Gems/1.8/gems/activerecord-2.1.0/lib/active_record/ attribute_methods.rb:343:in `respond_to?'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_view/ helpers/form_helper.rb:622:in `value_before_type_cast'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_view/ helpers/form_helper.rb:612:in `value_before_type_cast'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_view/ helpers/form_helper.rb:535:in `to_input_field_tag'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_view/ helpers/form_helper.rb:358:in `text_field'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_view/ helpers/form_helper.rb:709:in `send'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_view/ helpers/form_helper.rb:709:in `text_field'     app/views/entries/new.html.erb:8:in `_run_erb_47app47views47entries47new46html46erb'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_view/ helpers/form_helper.rb:317:in `fields_for'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_view/ helpers/form_helper.rb:253:in `form_for'     app/views/entries/new.html.erb:3:in `_run_erb_47app47views47entries47new46html46erb'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_view/ base.rb:338:in `send'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_view/ base.rb:338:in `execute'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_view/ template_handlers/compilable.rb:29:in `send'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_view/ template_handlers/compilable.rb:29:in `render'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_view/ template.rb:35:in `render'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_view/ template.rb:22:in `render_template'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_view/ base.rb:245:in `render_file'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ base.rb:1108:in `render_for_file'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ base.rb:865:in `render_with_no_layout'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ base.rb:880:in `render_with_no_layout'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ layout.rb:251:in `render_without_benchmark'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ benchmarking.rb:51:in `render'     /Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/active_support/ core_ext/benchmark.rb:8:in `realtime'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ benchmarking.rb:51:in `render'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ mime_responds.rb:131:in `send'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ mime_responds.rb:131:in `custom'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ mime_responds.rb:160:in `call'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ mime_responds.rb:160:in `respond'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ mime_responds.rb:154:in `each'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ mime_responds.rb:154:in `respond'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ mime_responds.rb:107:in `respond_to'     app/controllers/entries_controller.rb:29:in `new'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ base.rb:1162:in `send'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ base.rb:1162:in `perform_action_without_filters'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ filters.rb:580:in `call_filters'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ filters.rb:573:in `perform_action_without_benchmark'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ benchmarking.rb:68:in `perform_action_without_rescue'     /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ ruby/1.8/benchmark.rb:293:in `measure'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ benchmarking.rb:68:in `perform_action_without_rescue'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ rescue.rb:201:in `perform_action_without_caching'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ caching/sql_cache.rb:13:in `perform_action'     /Library/Ruby/Gems/1.8/gems/activerecord-2.1.0/lib/active_record/ connection_adapters/abstract/query_cache.rb:33:in `cache'     /Library/Ruby/Gems/1.8/gems/activerecord-2.1.0/lib/active_record/ query_cache.rb:8:in `cache'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ caching/sql_cache.rb:12:in `perform_action'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ base.rb:529:in `send'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ base.rb:529:in `process_without_filters'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ filters.rb:569:in `process_without_session_management_support'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ session_management.rb:130:in `process'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ base.rb:389:in `process'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ dispatcher.rb:149:in `handle_request'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ dispatcher.rb:107:in `dispatch'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ dispatcher.rb:104:in `synchronize'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ dispatcher.rb:104:in `dispatch'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ dispatcher.rb:120:in `dispatch_cgi'     /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/ dispatcher.rb:35:in `dispatch'     /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ ruby/gems/1.8/gems/mongrel-1.1.4/lib/mongrel/rails.rb:76:in `process'     /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ ruby/gems/1.8/gems/mongrel-1.1.4/lib/mongrel/rails.rb:74:in `synchronize'     /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ ruby/gems/1.8/gems/mongrel-1.1.4/lib/mongrel/rails.rb:74:in `process'     /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ ruby/gems/1.8/gems/mongrel-1.1.4/lib/mongrel.rb:159:in `process_client'     /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ ruby/gems/1.8/gems/mongrel-1.1.4/lib/mongrel.rb:158:in `each'     /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ ruby/gems/1.8/gems/mongrel-1.1.4/lib/mongrel.rb:158:in `process_client'     /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ ruby/gems/1.8/gems/mongrel-1.1.4/lib/mongrel.rb:285:in `run'     /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ ruby/gems/1.8/gems/mongrel-1.1.4/lib/mongrel.rb:285:in `initialize'     /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ ruby/gems/1.8/gems/mongrel-1.1.4/lib/mongrel.rb:285:in `new'     /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ ruby/gems/1.8/gems/mongrel-1.1.4/lib/mongrel.rb:285:in `run'     /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ ruby/gems/1.8/gems/mongrel-1.1.4/lib/mongrel.rb:268:in `initialize'     /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ ruby/gems/1.8/gems/mongrel-1.1.4/lib/mongrel.rb:268:in `new'     /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ ruby/gems/1.8/gems/mongrel-1.1.4/lib/mongrel.rb:268:in `run'     /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ ruby/gems/1.8/gems/mongrel-1.1.4/lib/mongrel/configurator.rb:282:in `run'     /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ ruby/gems/1.8/gems/mongrel-1.1.4/lib/mongrel/configurator.rb:281:in `each'     /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ ruby/gems/1.8/gems/mongrel-1.1.4/lib/mongrel/configurator.rb:281:in `run'     /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ ruby/gems/1.8/gems/mongrel-1.1.4/bin/mongrel_rails:128:in `run'     /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ ruby/gems/1.8/gems/mongrel-1.1.4/lib/mongrel/command.rb:212:in `run'     /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ ruby/gems/1.8/gems/mongrel-1.1.4/bin/mongrel_rails:281     /usr/bin/mongrel_rails:19:in `load'     /usr/bin/mongrel_rails:19

Rendering /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/ action_controller/templates/rescues/layout.erb (internal_server_error)

Any thoughts?

Thanks,

Ron

I have seen the error message

The error occurred while evaluating nil.generated_methods)

when you use a Rails reserved name

field name "class" is most common offender, may be "type" as well.

Change it to something totally different and see what happens.

-Hari

Ron, First, 'type' isn't much better than 'class' since 'type' is used to indicate Single-Table Inheritance in ActiveRecord.

Now, I first looked to see if 'dimensions' was actually a database column. Seems like it is (and spelled consistently in both places, too). I can't try to replicate your error because I don't have 2.1 installed, but can you avoid it by commenting out line 8? (<%# is an erb comment)

Do other text_field calls for this object then work? From the low line number, I'm guessing that this is the first text_field in your view.

I may not be helping you much, but this is the kind of controlled descent I'd make into the rabbit hole.

-Rob

So I tried changing type/class to something completely random--in this case binder. (I call my variables that when I'm frustrated--I know, its weird).

So, its still coming up. I even tried changing dimensions value when I did that. I wonder if my name for the controller is reserved, entry? None of the other text fields for the scaffold actually work.

Really strange.

btw... I LOVE that phrase "controlled descent into the rabbit hole." I'm going to use it down the road, if that's ok.

Ron

Ahaha...so I fixed it. It was just that entry, my name for the model, was a reserved word.

R

Glad you found it. The phrase is free to use, but only if you use it
wisely. :wink:

-Rob

Hmmm.. I have a table called 'entries' and a model named 'entry' in my app and it works. Rails 2.0.2