Francois
Francois

Reputation: 10631

Undefined method 'name' for nil:NilClass

I'm getting some kind of nil error; this tells me it's calling nil on 'name', but it does not show me where.

Here are my routes:

# Mobile api
  map.namespace :mobile_api do |api|
    api.resources :updates, :only => [ :index ]
    api.resources :checkouts, :collection => { :reading_progress => :put }
  end

I am using postman to debug the api call.

Here is the data I send with postman as Raw, JSON as a PUT to the url localhost:3000/mobile_api/checkouts/reading_progress:

{"title":"Awesome post!", "tags": ["blue", "jeans"] }

When I remove the JSON data and make the request with no data it goes through to the controller.

class MobileApi::CheckoutsController < ApplicationController
  def reading_progress
    binding.pry
  end
end

As soon as I add any data to postman to send, I get this error:

|ruby-1.8.7-p371| ubuntu-francois in ~/sites/mds
± |old-state ✗| → ./script/server
=> Booting Mongrel
=> Rails 2.3.17 application starting on http://0.0.0.0:3000
/home/francois/.rvm/gems/ruby-1.8.7-p371/gems/rubyzip2-2.0.2/lib/zip/version.rb:2: warning: already initialized constant VERSION
=> Call with -d to detach
=> Ctrl-C to shutdown server
  SQL (0.1ms)   SET NAMES 'utf8'
  SQL (0.1ms)   SET SQL_AUTO_IS_NULL=0
Error occurred while parsing request parameters.
Contents:

{"title":"Awesome post!", "tags": ["blue", "jeans"] }
/!\ FAILSAFE /!\  Mon Jul 15 17:26:37 +0200 2013
  Status: 500 Internal Server Error
  undefined method `name' for nil:NilClass
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/activesupport-2.3.17/lib/active_support/whiny_nil.rb:52:in `method_missing'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/activesupport-2.3.17/lib/active_support/xml_mini/rexml.rb:29:in `merge_element!'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/activesupport-2.3.17/lib/active_support/xml_mini/rexml.rb:18:in `parse'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/activesupport-2.3.17/lib/active_support/xml_mini.rb:12:in `__send__'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/activesupport-2.3.17/lib/active_support/xml_mini.rb:12:in `parse'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/activesupport-2.3.17/lib/active_support/core_ext/hash/conversions.rb:171:in `from_xml'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/actionpack-2.3.17/lib/action_controller/params_parser.rb:34:in `parse_formatted_parameters'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/actionpack-2.3.17/lib/action_controller/params_parser.rb:11:in `call'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/actionpack-2.3.17/lib/action_controller/session/abstract_store.rb:177:in `call'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/activerecord-2.3.17/lib/active_record/query_cache.rb:29:in `call'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/activerecord-2.3.17/lib/active_record/connection_adapters/abstract/query_cache.rb:34:in `cache'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/activerecord-2.3.17/lib/active_record/query_cache.rb:9:in `cache'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/activerecord-2.3.17/lib/active_record/query_cache.rb:28:in `call'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/activerecord-2.3.17/lib/active_record/connection_adapters/abstract/connection_pool.rb:361:in `call'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/actionpack-2.3.17/lib/action_controller/failsafe.rb:26:in `call'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/rack-1.1.6/lib/rack/lock.rb:11:in `call'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/rack-1.1.6/lib/rack/lock.rb:11:in `synchronize'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/rack-1.1.6/lib/rack/lock.rb:11:in `call'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/actionpack-2.3.17/lib/action_controller/dispatcher.rb:114:in `call'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/actionpack-2.3.17/lib/action_controller/reloader.rb:34:in `run'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/actionpack-2.3.17/lib/action_controller/dispatcher.rb:108:in `call'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/rails-2.3.17/lib/rails/rack/static.rb:31:in `call'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/rack-1.1.6/lib/rack/urlmap.rb:47:in `call'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/rack-1.1.6/lib/rack/urlmap.rb:41:in `each'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/rack-1.1.6/lib/rack/urlmap.rb:41:in `call'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/rails-2.3.17/lib/rails/rack/log_tailer.rb:17:in `call'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/rack-1.1.6/lib/rack/content_length.rb:13:in `call'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/rack-1.1.6/lib/rack/chunked.rb:15:in `call'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/rack-1.1.6/lib/rack/handler/mongrel.rb:67:in `process'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/mongrel-1.1.5/lib/mongrel.rb:159:in `process_client'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/mongrel-1.1.5/lib/mongrel.rb:158:in `each'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/mongrel-1.1.5/lib/mongrel.rb:158:in `process_client'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/mongrel-1.1.5/lib/mongrel.rb:285:in `run'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/mongrel-1.1.5/lib/mongrel.rb:285:in `initialize'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/mongrel-1.1.5/lib/mongrel.rb:285:in `new'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/mongrel-1.1.5/lib/mongrel.rb:285:in `run'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/mongrel-1.1.5/lib/mongrel.rb:268:in `initialize'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/mongrel-1.1.5/lib/mongrel.rb:268:in `new'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/mongrel-1.1.5/lib/mongrel.rb:268:in `run'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/rack-1.1.6/lib/rack/handler/mongrel.rb:38:in `run'
    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/rails-2.3.17/lib/commands/server.rb:111
    ./script/server:3:in `require'
    ./script/server:3

Hope you can help out.

Upvotes: 0

Views: 1125

Answers (1)

Jon Cairns
Jon Cairns

Reputation: 11949

The error is occurring here:

    /home/francois/.rvm/gems/ruby-1.8.7-p371/gems/activesupport-2.3.17/lib/active_support/xml_mini/rexml.rb:29:in `merge_element!'

The top line of the stack trace is active support trying to help with NilClass errors.

What's interesting is that rexml is being invoked to parse json. It's possible that the request headers aren't set correctly with your JSON string. Ensure that the header is set:

Content-Type: application/json

Upvotes: 1

Related Questions