Forum: Ruby on Rails Need help with ArgumentError during save()

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.
C56f6508ce4610e8527606a435b5870f?d=identicon&s=25 William Lefevre (wlefevre)
on 2007-02-10 02:09
Greetings,
    I've been getting an error all afternoon and haven't been able to
figure it out; any help would be wonder full.

Models-----

class Project < ActiveRecord::Base
  belongs_to :job
  belongs_to :thumbnail, :class_name => 'Image', :foreign_key =>
'image_id'
  has_and_belongs_to_many :services
end

class Thumbnail < Image
  has_one :project
end

Controller------

class Admin::ProjectsController < ApplicationController

def save
   .
   .
   .  # thumbnail image has been uploaded, created, and added to
@project.thumbnail

    #if there's an id then do an update otherwise it's a new project so
do a save
   if params[:id]
     @s1 = @project.thumbnail.save if @project.thumbnail
     @s2 = @project.update_attributes( params[:project] )    # this is
the line which fails
     @saved = ( @s1 == false || @s2 == false ) ? false : true
   else
     @saved = @project.save
   end

   if @saved # decide what to render or where to redirect, etc.
   .
   .
   .
end
end

I only run into problems when no thumbnail has been previously saved and
the thumbnail I'm trying to save is invalid (ie. fails to save). If a
thumbnail has already been saved then uploading a new, invalid thumbnail
is handled perfectly. It also doesn't matter if the Project is being
saved for the first time or updated.

Here's the full error I'm getting:

ArgumentError in Admin/projectsController#save

wrong number of arguments (1 for 0)
RAILS_ROOT:
/Users/william/Projects/rails/lizarddesign/public/../config/..

Application Trace | Framework Trace | Full Trace
/usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/callbacks.rb:349:in
`save'
/usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/callbacks.rb:349:in
`callback'
/usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/callbacks.rb:346:in
`callback'
/usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/callbacks.rb:341:in
`each'
/usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/callbacks.rb:341:in
`callback'
/usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/callbacks.rb:252:in
`create_or_update'
/usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/base.rb:1392:in
`save_without_validation'
/usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/validations.rb:736:in
`save_without_transactions'
/usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/transactions.rb:126:in
`save'
/usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/connection_adapters/abstract/database_statements.rb:51:in
`transaction'
/usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/transactions.rb:91:in
`transaction'
/usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/transactions.rb:118:in
`transaction'
/usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/transactions.rb:126:in
`save'
/usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/base.rb:1439:in
`update_attributes'
#{RAILS_ROOT}/app/controllers/admin/projects_controller.rb:48:in `save'
Request

Parameters: {"commit"=>"Save", "project"=>{"job_id"=>"4", "title"=>"test
- no errors", "client"=>"big client", "description"=>"descriptoin is
good"}, "id"=>"32", "service_ids"=>["462", "483"],
"image"=>{"thumbnail"=>#<StringIO:0x26bf6b4>}}

Show session dump

Response

Headers: {"cookie"=>[], "Cache-Control"=>"no-cache"}


Lastly it doesn't crash till after the after_validation callback.

I'm stymied. Any insight would be great.

Thanks William
58c6efb8466b9f85155fe6aa9fc37fce?d=identicon&s=25 Chris T (Guest)
on 2007-02-10 10:42
(Received via mailing list)
Which is line 48
(#{RAILS_ROOT}/app/controllers/admin/projects_controller.rb:48)?
C56f6508ce4610e8527606a435b5870f?d=identicon&s=25 William Lefevre (wlefevre)
on 2007-02-10 21:24
Chris T wrote:
> Which is line 48
> (#{RAILS_ROOT}/app/controllers/admin/projects_controller.rb:48)?

line 48 is:
     @s2 = @project.update_attributes( params[:project] )

I get the error for both Project#update_attributes and Project#save when
the referenced (belongs_to) Thumbnail fails validation and does not
save. Also this only happens if there has never been an associated
Thumbnail. Once one is successfully associated it's no longer a problem.
C56f6508ce4610e8527606a435b5870f?d=identicon&s=25 William Lefevre (wlefevre)
on 2007-02-10 21:43
William Lefevre wrote:
> Greetings,
>     I've been getting an error all afternoon and haven't been able to
> figure it out; any help would be wonder full.

Whew. I figured it out a solution but I don't feel 100% why I was
getting this error. If anyone has any insight I'd still love to hear it.

The solution was simple, I added:

      validates_associated :thumbnail

to my Project model and all is good.
This topic is locked and can not be replied to.