Forum: Ruby on Rails Called id for nil, which would mistakenly be 4 -- if you rea

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Shreekar Joshi (Guest)
on 2006-04-21 16:04
(Received via mailing list)
Hi

	I am a newbie to Ruby on Rails, but experienced in programming.
I am trying out Rolling with Ruby on Rails article by Curt H. on
onlamp.com. I have encountered following error:

Called id for nil, which would mistakenly be 4 -- if you really wanted
the id of nil, use object_id

	I searched the archives of the list and found that similar
question was left unanswered. I do understand from the error that the
recipe.id is null(or nil).
	I have come to this page from edit link from the show page. This
show page is generated by the scaffolding. The url for this link *seems*
to be correct - recipe/edit/2 (where 2 is id of the recipe).
	Any ideas?

The entire dump is reproduced below:

RuntimeError in Recipe#edit
Showing app/views/recipe/edit.rhtml where line #10 raised:

Called id for nil, which would mistakenly be 4 -- if you really wanted
the id of nil, use object_id

Extracted source (around line #10):

7:
8:  <form action="../update/" <%= @recipe.id %> method="POST">
9:   <input id="recipe_id" name="recipe[id]" size="30"
10:          type="hidden" value="<%= @recipe.id %>" />
11:   <p><b>Title</b><br>
12:   <input id="recipe_title" name="recipe[title]" size="30"
13:          type="text" value="<%= @recipe.title %>" />



RAILS_ROOT: ./script/../config/..

Application Trace | Framework Trace | Full Trace
#{RAILS_ROOT}/app/views/recipe/edit.rhtml:10:in `_run_rhtml_recipe_edit'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_view/base.rb
:314:in `send'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_view/base.rb
:314:in `compile_and_render_template'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_view/base.rb
:290:in `render_template'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_view/base.rb
:249:in `render_file'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/b
ase.rb:699:in `render_file'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/b
ase.rb:621:in `render_with_no_layout'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/l
ayout.rb:251:in `render_without_benchmark'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/b
enchmarking.rb:53:in `render'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/b
enchmarking.rb:53:in `measure'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/b
enchmarking.rb:53:in `render'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/b
ase.rb:911:in `perform_action_without_filters'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/f
ilters.rb:368:in `perform_action_without_benchmark'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/b
enchmarking.rb:69:in `perform_action_without_rescue'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/b
enchmarking.rb:69:in `measure'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/b
enchmarking.rb:69:in `perform_action_without_rescue'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/r
escue.rb:82:in `perform_action'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/b
ase.rb:381:in `send'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/b
ase.rb:381:in `process_without_filters'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/f
ilters.rb:377:in `process_without_session_management_support'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/s
ession_management.rb:117:in `process'
c:/ruby/lib/ruby/gems/1.8/gems/rails-1.1.2/lib/dispatcher.rb:38:in
`dispatch'
c:/ruby/lib/ruby/gems/1.8/gems/rails-1.1.2/lib/webrick_server.rb:115:in
`handle_dispatch'
c:/ruby/lib/ruby/gems/1.8/gems/rails-1.1.2/lib/webrick_server.rb:81:in
`service'
c:/ruby/lib/ruby/1.8/webrick/httpserver.rb:104:in `service'
c:/ruby/lib/ruby/1.8/webrick/httpserver.rb:65:in `run'
c:/ruby/lib/ruby/1.8/webrick/server.rb:155:in `start_thread'
c:/ruby/lib/ruby/1.8/webrick/server.rb:144:in `start'
c:/ruby/lib/ruby/1.8/webrick/server.rb:144:in `start_thread'
c:/ruby/lib/ruby/1.8/webrick/server.rb:94:in `start'
c:/ruby/lib/ruby/1.8/webrick/server.rb:89:in `each'
c:/ruby/lib/ruby/1.8/webrick/server.rb:89:in `start'
c:/ruby/lib/ruby/1.8/webrick/server.rb:79:in `start'
c:/ruby/lib/ruby/1.8/webrick/server.rb:79:in `start'
c:/ruby/lib/ruby/gems/1.8/gems/rails-1.1.2/lib/webrick_server.rb:67:in
`dispatch'
c:/ruby/lib/ruby/gems/1.8/gems/rails-1.1.2/lib/commands/servers/webrick.
rb:59
c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:18:in
`require__'
c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:18:in
`require'
c:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.3.1/lib/active_support/de
pendencies.rb:147:in `require'
c:/ruby/lib/ruby/gems/1.8/gems/rails-1.1.2/lib/commands/server.rb:30
c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:18:in
`require__'
c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:18:in
`require'
c:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.3.1/lib/active_support/de
pendencies.rb:147:in `require'
script/server:3
#{RAILS_ROOT}/app/views/recipe/edit.rhtml:10:in `_run_rhtml_recipe_edit'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_view/base.rb
:314:in `send'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_view/base.rb
:314:in `compile_and_render_template'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_view/base.rb
:290:in `render_template'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_view/base.rb
:249:in `render_file'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/b
ase.rb:699:in `render_file'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/b
ase.rb:621:in `render_with_no_layout'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/l
ayout.rb:251:in `render_without_benchmark'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/b
enchmarking.rb:53:in `render'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/b
enchmarking.rb:53:in `measure'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/b
enchmarking.rb:53:in `render'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/b
ase.rb:911:in `perform_action_without_filters'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/f
ilters.rb:368:in `perform_action_without_benchmark'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/b
enchmarking.rb:69:in `perform_action_without_rescue'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/b
enchmarking.rb:69:in `measure'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/b
enchmarking.rb:69:in `perform_action_without_rescue'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/r
escue.rb:82:in `perform_action'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/b
ase.rb:381:in `send'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/b
ase.rb:381:in `process_without_filters'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/f
ilters.rb:377:in `process_without_session_management_support'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/s
ession_management.rb:117:in `process'
c:/ruby/lib/ruby/gems/1.8/gems/rails-1.1.2/lib/dispatcher.rb:38:in
`dispatch'
c:/ruby/lib/ruby/gems/1.8/gems/rails-1.1.2/lib/webrick_server.rb:115:in
`handle_dispatch'
c:/ruby/lib/ruby/gems/1.8/gems/rails-1.1.2/lib/webrick_server.rb:81:in
`service'
c:/ruby/lib/ruby/1.8/webrick/httpserver.rb:104:in `service'
c:/ruby/lib/ruby/1.8/webrick/httpserver.rb:65:in `run'
c:/ruby/lib/ruby/1.8/webrick/server.rb:155:in `start_thread'
c:/ruby/lib/ruby/1.8/webrick/server.rb:144:in `start'
c:/ruby/lib/ruby/1.8/webrick/server.rb:144:in `start_thread'
c:/ruby/lib/ruby/1.8/webrick/server.rb:94:in `start'
c:/ruby/lib/ruby/1.8/webrick/server.rb:89:in `each'
c:/ruby/lib/ruby/1.8/webrick/server.rb:89:in `start'
c:/ruby/lib/ruby/1.8/webrick/server.rb:79:in `start'
c:/ruby/lib/ruby/1.8/webrick/server.rb:79:in `start'
c:/ruby/lib/ruby/gems/1.8/gems/rails-1.1.2/lib/webrick_server.rb:67:in
`dispatch'
c:/ruby/lib/ruby/gems/1.8/gems/rails-1.1.2/lib/commands/servers/webrick.
rb:59
c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:18:in
`require__'
c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:18:in
`require'
c:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.3.1/lib/active_support/de
pendencies.rb:147:in `require'
c:/ruby/lib/ruby/gems/1.8/gems/rails-1.1.2/lib/commands/server.rb:30
c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:18:in
`require__'
c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:18:in
`require'
c:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.3.1/lib/active_support/de
pendencies.rb:147:in `require'
script/server:3
Request
Parameters: {"id"=>"1"}

Show session dump

---
flash: !ruby/hash:ActionController::Flash::FlashHash {}
Response
Headers: {"cookie"=>[], "Cache-Control"=>"no-cache"}

Regards,

Shreekar Joshi
Jean-François (Guest)
on 2006-04-21 16:32
(Received via mailing list)
Hello Shreekar,

>         I am a newbie to Ruby on Rails, but experienced in programming.
> I am trying out Rolling with Ruby on Rails article by Curt H. on
> onlamp.com. I have encountered following error:
>
> Called id for nil, which would mistakenly be 4 -- if you really wanted
> the id of nil, use object_id
>
>         I searched the archives of the list and found that similar
> question was left unanswered. I do understand from the error that the
> recipe.id is null(or nil).

Launch an irb and type :

nil.id

(irb):1: warning: Object#id will be deprecated; use Object#object_id
=> 4

nil is an instance of the singleton class NilClass and nil is also
an Object object, his object_id is 4 (*). So you're calling Object#id (
equivalent to Object#object_id) method and not a AR::B#id to retrieve
the primary key.

You have to test before than @recipe is not nil.

Maybe in your action controller, @recipe is not assigned correctly
to be passed in your view.

    -- Jean-François.
Bill W. (Guest)
on 2006-04-21 16:53
(Received via mailing list)
Hi Shreekar,

Shreekar Joshi wrote:

<snip>

> I have encountered following error:

> Called id for nil, which would mistakenly
> be 4 -- if you really wanted the id of nil,
> use object_id
>
> I have come to this page from edit link
> from the show page. This show page is
> generated by the scaffolding. The url for
> this link *seems* to be correct -
> recipe/edit/2 (where 2 is id of the recipe).
> Any ideas?

Two suggestions....

First, if you're using InstantRails, a working version of the cookbook
application is included and you can use that to check against the code
you're having problems with.  If you're not using InstantRails, you
might
want to download it from http://instantrails.rubyforge.org/wiki/wiki.pl

Second, to address your problem specifically, the error you're getting
results from trying to access an object in a view that was not
initialized
in the controller.  Views typically use instance variables.  So the
problem
usually traces back to something like...

recipe = Recipe.find(:all)    # in this case, recipe is a local variable
that the view sill not have access to
@Recipe = Recipe.find(:all)   # in this case, @Recipe is an instance
variable, but it's a different instance variable than @recipe.

There are lots of variations possible.  Typos and capitaliation
represent
the largest proportion of errors I personally have made.  If this
doesn't
solve your problem, please post the controller code and I'm sure someone
will be able to help.

Best regards,
Bill
Tom M. (Guest)
on 2006-04-21 21:44
(Received via mailing list)
On Apr 21, 2006, at 5:03 AM, Shreekar Joshi wrote:

> I do understand from the error that the
> recipe.id is null(or nil).

Actually, the error is telling you that recipe
itself is nil, not recipe.id

--
-- Tom M.
This topic is locked and can not be replied to.