Question - Update error

Using Edge with scaffold_resource here. My update page is throwing a
nil error.

“You have a nil object when you didn’t expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.update_attributes”

The form loads properly with all the fields as input , but when I hit
update …bam!

def update

respond_to do |format|
  if @position.update_attributes(params[:position])

    format.html { redirect_to position_url(@position) }
    format.xml  { render :nothing => true }
  else
    format.html { render :action => "edit" }
    format.xml  { render :xml => @position.errors.to_xml }
  end
end

The log doesn’t point anything out to me but I’ll show it regardless
in case it helps-

NoMethodError (You have a nil object when you didn’t expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.update_attributes):
/app/controllers/positions_controller.rb:93:in update' /vendor/rails/actionpack/lib/action_controller/mime_responds.rb:104:inrespond_to’
/app/controllers/positions_controller.rb:92:in update' /vendor/rails/actionpack/lib/action_controller/base.rb:1022:inperform_action_without_filters’
/vendor/rails/actionpack/lib/action_controller/filters.rb:628:in
call_filter' /vendor/rails/actionpack/lib/action_controller/filters.rb:634:incall_filter’
/vendor/rails/actionpack/lib/action_controller/filters.rb:453:in
call' /vendor/rails/actionpack/lib/action_controller/filters.rb:633:incall_filter’
/vendor/rails/actionpack/lib/action_controller/filters.rb:615:in
perform_action_without_benchmark' /vendor/rails/actionpack/lib/action_controller/benchmarking.rb:66:inperform_action_without_rescue’
C:/INSTAN~1/ruby/lib/ruby/1.8/benchmark.rb:293:in measure' /vendor/rails/actionpack/lib/action_controller/benchmarking.rb:66:inperform_action_without_rescue’
/vendor/rails/actionpack/lib/action_controller/rescue.rb:81:in
perform_action' /vendor/rails/actionpack/lib/action_controller/base.rb:425:inprocess_without_filters’
/vendor/rails/actionpack/lib/action_controller/filters.rb:620:in
process_without_session_management_support' /vendor/rails/actionpack/lib/action_controller/session_management.rb:114:inprocess’
/vendor/rails/actionpack/lib/action_controller/base.rb:328:in
process' /vendor/rails/railties/lib/dispatcher.rb:41:indispatch’
C:/INSTAN~1/ruby/lib/ruby/gems/1.8/gems/mongrel-0.3.13.3-mswin32/lib/mongrel/rails.rb:73:in
process' C:/INSTAN~1/ruby/lib/ruby/gems/1.8/gems/mongrel-0.3.13.3-mswin32/lib/mongrel.rb:551:inprocess_client’
C:/INSTAN~1/ruby/lib/ruby/gems/1.8/gems/mongrel-0.3.13.3-mswin32/lib/mongrel.rb:550:in
process_client' C:/INSTAN~1/ruby/lib/ruby/gems/1.8/gems/mongrel-0.3.13.3-mswin32/lib/mongrel.rb:636:inrun’
C:/INSTAN~1/ruby/lib/ruby/gems/1.8/gems/mongrel-0.3.13.3-mswin32/lib/mongrel.rb:636:in
run' C:/INSTAN~1/ruby/lib/ruby/gems/1.8/gems/mongrel-0.3.13.3-mswin32/lib/mongrel.rb:625:inrun’
C:/INSTAN~1/ruby/lib/ruby/gems/1.8/gems/mongrel-0.3.13.3-mswin32/lib/mongrel.rb:956:in
run' C:/INSTAN~1/ruby/lib/ruby/gems/1.8/gems/mongrel-0.3.13.3-mswin32/lib/mongrel.rb:955:inrun’
C:/INSTAN~1/ruby/lib/ruby/gems/1.8/gems/mongrel-0.3.13.3-mswin32/bin/mongrel_rails:127:in
run' C:/INSTAN~1/ruby/lib/ruby/gems/1.8/gems/mongrel-0.3.13.3-mswin32/lib/mongrel/command.rb:199:inrun’
C:/INSTAN~1/ruby/lib/ruby/gems/1.8/gems/mongrel-0.3.13.3-mswin32/bin/mongrel_rails:235
/vendor/rails/activesupport/lib/active_support/dependencies.rb:357:in
load' /vendor/rails/railties/lib/commands/servers/mongrel.rb:48 C:/INSTAN~1/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:inrequire’
/vendor/rails/activesupport/lib/active_support/dependencies.rb:364:in
`require’
/vendor/rails/railties/lib/commands/server.rb:39
script/server:3

I’m wondering if this is a bug - because I went back to earlier today
in a test app to see what scaffold_resource generated for the update
and it was like this:

def update
@article = Article.find(params[:id])

respond_to do |format|
  if @article.update_attributes(params[:article])
    format.html { redirect_to article_url(@article) }
    format.xml  { render :nothing => true }
  else
    format.html { render :action => "edit" }
    format.xml  { render :xml => @article.errors.to_xml }
  end
end

end

Yet in my app it was like this:

def update

respond_to do |format|
  if @position.update_attributes(params[:position])


    format.html { redirect_to position_url(@position) }
    format.xml  { render :nothing => true }
  else
    format.html { render :action => "edit" }
    format.xml  { render :xml => @position.errors.to_xml }
  end
end

end

See the difference , 2nd one has no find and the if update_params on
wrong line. So I’ve now fixed this problem but wonder if I should be
report it to trac dev.rubyonrails ? I’ve never done that before .

Stuart

Stuart
On 9/28/06, Dark A. [email protected] wrote:

def update
end
/app/controllers/positions_controller.rb:92:in update'perform_action_without_benchmark’
process_without_session_management_support' C:/INSTAN~1/ruby/lib/ruby/gems/1.8/gems/mongrel-0.3.13.3-mswin32/lib/mongrel.rb:636:inrun’
script/server:3

http://en.wikipedia.org/wiki/Dark_ambient


I started getting this error when I svn upped Rails Edge the other
day as well. It’s definitely slowing down my dev cycle since I’m not
getting nice error reporting in the browser any more.

(resource_navigator plugin is now broken as well, as a side-note)

Jamie

See this thread:

error page replaced with http 500 as of edge 5208 ?

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs