Re: "RuntimeError: Called id for nil" when saving

Eric Goodwin
Fri, 19 Aug 2005 21:34:15 -0000

Hey,

Found out what is way. I have acts_as_versioned on and a field in the
database called lock_version, which by default I had set to null. When
locking.rb tried to update the field, it tried to add 1 to what was
already in the database. This failed.

I added in a check for null and if it is null then I make it 0 before I
try to add 1 to it.

Thanks,

Eric

Eric Goodwin wrote:

> Thanks Jamis,
> I should have seem that there. In the console I wasn''t setting my
> User.current_user.id that I use. I''m getting a different error now
> though.
>
> >> asset = Assetstatus.find(1)
> => #<Assetstatus:0x39d6b08
@attributes={"title"=>"Not Started",
> "id"=>"1", "deleted"=>nil}>
> >> asset.save
> => true
> >> section = Section.find(1)
> => #<Section:0x39bffa8
@attributes={"updated_at"=>"2005-08-02
> 11:09:09", "title"=>"Activities", "c
> reated_by"=>"9", "lock_version"=>nil,
"id"=>"1", "updated_by"=>"9",
> "version"=>nil, "sectionstatus
> _id"=>"4", "deleted"=>"0",
"sectiontype_id"=>"1",
> "parent_id"=>"00000000000",
"position"=>"1", "cr
> eated_at"=>"2005-08-02 11:08:00"}>
> >> section.title = "Activities"
> => "Activities"
> >> section.save
> NoMethodError: WARNING:  You have a nil object when you probably
> didn''t expect it!  Odds are you
> want an instance of Array instead.
>
> Look in the callstack to see where you''re working with an object
that
> could be nil.
> Investigate your methods and make sure the object is what you expect!
>
>        from
>
c:/Ruby/lib/ruby/gems/1.8/gems/activerecord-1.11.1/lib/active_record/locking.rb:33:in
>
> `update_without_callbacks''
>        from
>
c:/Ruby/lib/ruby/gems/1.8/gems/activerecord-1.11.1/lib/active_record/callbacks.rb:274
>
> :in `update_without_timestamps''
>        from
>
c:/Ruby/lib/ruby/gems/1.8/gems/activerecord-1.11.1/lib/active_record/timestamp.rb:39:
>
> in `update_without_user''
>        from
> c:/Ruby/lib/ruby/gems/1.8/gems/activerecord-1.11.1/lib/usermonitor.rb:25:in
> `update''
>        from
>
c:/Ruby/lib/ruby/gems/1.8/gems/activerecord-1.11.1/lib/active_record/base.rb:1139:in
>
> `create_or_update_without_callbacks''
>        from
>
c:/Ruby/lib/ruby/gems/1.8/gems/activerecord-1.11.1/lib/active_record/callbacks.rb:249
>
> :in `create_or_update''
>        from
>
c:/Ruby/lib/ruby/gems/1.8/gems/activerecord-1.11.1/lib/active_record/base.rb:965:in
> `
> save_without_validation''
>        from
>
c:/Ruby/lib/ruby/gems/1.8/gems/activerecord-1.11.1/lib/active_record/validations.rb:6
>
> 50:in `save_without_transactions''
>        from
>
c:/Ruby/lib/ruby/gems/1.8/gems/activerecord-1.11.1/lib/active_record/transactions.rb:
>
> 128:in `save''
>        from
>
c:/Ruby/lib/ruby/gems/1.8/gems/activerecord-1.11.1/lib/active_record/transactions.rb:
>
> 128:in `transaction''
>        from
>
c:/Ruby/lib/ruby/gems/1.8/gems/activerecord-1.11.1/lib/active_record/transactions.rb:
>
> 93:in `transaction''
>        from
>
c:/Ruby/lib/ruby/gems/1.8/gems/activerecord-1.11.1/lib/active_record/transactions.rb:
>
> 120:in `transaction''
>        from
>
c:/Ruby/lib/ruby/gems/1.8/gems/activerecord-1.11.1/lib/active_record/transactions.rb:
>
> 128:in `save''
>        from (irb):14
>
> Any ideas,
> Thanks in advance.
> Eric
>
> Jamis Buck wrote:
>
>> On Aug 19, 2005, at 2:45 PM, Eric Goodwin wrote:
>>
>>> Hey,
>>> I''m having an error when I try to save anything. Here is
the output
>>> from the console. Anyone know why this would be happeing.
>>>
>>> >> asset = Assetstatus.find(1)
>>> => #<Assetstatus:0x3bd3bf0
@attributes={"title"=>"Not Started",
>>> "id"=>"1", "deleted"=>nil}>
>>> >> asset.deleted = 0
>>> => 0
>>> >> asset.save
>>> RuntimeError: Called id for nil, which would mistakenly be 4 -- if
>>> you really wanted the id of nil
>>> , use object_id
>>>        from c:/Ruby/lib/ruby/gems/1.8/gems/activerecord-1.11.1/lib/
>>> usermonitor.rb:23:in `update''
>>>        from c:/Ruby/lib/ruby/gems/1.8/gems/activerecord-1.11.1/lib/
>>> active_record/base.rb:1139:in
>>> `create_or_update_without_callbacks''
>>>        from c:/Ruby/lib/ruby/gems/1.8/gems/activerecord-1.11.1/lib/
>>> active_record/callbacks.rb:249
>>> :in `create_or_update''
>>>        from c:/Ruby/lib/ruby/gems/1.8/gems/activerecord-1.11.1/lib/
>>> active_record/base.rb:965:in `
>>> save_without_validation''
>>>        from c:/Ruby/lib/ruby/gems/1.8/gems/activerecord-1.11.1/lib/
>>> active_record/validations.rb:6
>>> 50:in `save_without_transactions''
>>>        from c:/Ruby/lib/ruby/gems/1.8/gems/activerecord-1.11.1/lib/
>>> active_record/transactions.rb:
>>> 128:in `save''
>>>        from c:/Ruby/lib/ruby/gems/1.8/gems/activerecord-1.11.1/lib/
>>> active_record/transactions.rb:
>>> 128:in `transaction''
>>>        from c:/Ruby/lib/ruby/gems/1.8/gems/activerecord-1.11.1/lib/
>>> active_record/transactions.rb:
>>> 93:in `transaction''
>>>        from c:/Ruby/lib/ruby/gems/1.8/gems/activerecord-1.11.1/lib/
>>> active_record/transactions.rb:
>>> 120:in `transaction''
>>>        from c:/Ruby/lib/ruby/gems/1.8/gems/activerecord-1.11.1/lib/
>>> active_record/transactions.rb:
>>> 128:in `save''
>>>        from (irb):13
>>>        from :0
>>
>>
>>
>> I''m not sure what ''usermonitor.rb'' is... it
looks like it is in the
>> activerecord directory, but I don''t believe it''s a
part of
>> ActiveRecord itself. Is it something you added, perchance? What does
>> line 23 of that file look like?
>>
>> - Jamis