[help] problem uploading file... w stringifykey!

I am uploading an image the standard way…

advertising edit view

.... ..

my controller try to create the image…

advertising_controller
def update

@illustration = Illustration.new(params[:file_data])

@illustration.save

end

from the Illustration model…

attr_accessor :file_data

def file_data=(file_data)
@file_name = sanitize_filename(@file_data.original_filename) #
windows trick
write_attribute ‘extension’, @file_name.split(’.’).last.downcase
end

the request parameters :
“_method”=>“put”, “id”=>“5”, “file_data”=>#<File:/tmp/CGI29555.9>…

but I always get an error :
NoMethodError (undefined method stringify_keys!' for #<File:/tmp/CGI29555.9>): /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.2/lib/active_record/base.rb:1669:inattributes=’

the problem is actually in passing the params[:file_data], as using
@illustration = Illustration.new
is OK…

1- what’s this ActiveRecord error `stringify_keys!’
2- what’s wrong with my param ? cannot even get into the file_data
method ?

thanks a lot for your help… I am stuck for 2 days on this problem…

i think this method

def get_file
send_file(params[:file])
end

is missing check it out

small background:

“stringify_keys!” errors usually are populated because of some bad usage
with hashes:

basically, a key of the hash is supposed to be ‘stringified’ to_s of
some sort, but it cannot, because there is no way to ‘stringify’ that
key.
look at

http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/Hash/Keys.html#M000365

say, as an example, if it u had a hash like
{:controller => ‘some’, :action =>‘thing’}
it would become
{“controller” => ‘some’, “action” =>‘thing’}
after using the stringify_keys! method.

but, if you have a hash that has keys that cannot be ‘stringified’,
you’ll get this error. in our case, my guess would be

#<File:/tmp/CGI29555.9>

is causing an error. maybe it is trying to create a hash out of that
object, (while changing it to a params[:file_data] ) but fails as it is
a picture / no method to stringify the key of this object exists …

any special reason u don’t use some rails plugin for uploading pics?
just googling for a sec, i found

http://www.flex888.com/2007/03/21/three-ruby-on-rails-file-upload-plugins-reviewed.html

and i’ve heard good things about acts_as_attachment (although i haven’t
personally used it).

anyway, hope this helps out.

shai

Shai R. wrote:

small background:

“stringify_keys!” errors usually are populated because of some bad usage
with hashes:

basically, a key of the hash is supposed to be ‘stringified’ to_s of
some sort, but it cannot, because there is no way to ‘stringify’ that
key.
look at

http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/Hash/Keys.html#M000365

say, as an example, if it u had a hash like
{:controller => ‘some’, :action =>‘thing’}
it would become
{“controller” => ‘some’, “action” =>‘thing’}
after using the stringify_keys! method.

but, if you have a hash that has keys that cannot be ‘stringified’,
you’ll get this error. in our case, my guess would be

#<File:/tmp/CGI29555.9>

is causing an error. maybe it is trying to create a hash out of that
object, (while changing it to a params[:file_data] ) but fails as it is
a picture / no method to stringify the key of this object exists …

any special reason u don’t use some rails plugin for uploading pics?
just googling for a sec, i found

http://www.flex888.com/2007/03/21/three-ruby-on-rails-file-upload-plugins-reviewed.html

and i’ve heard good things about acts_as_attachment (although i haven’t
personally used it).

anyway, hope this helps out.

shai

thanks a lot for doc links…
I already gave a look at the plugins… but actually I don’t need all
their features, so I am using the standard Rails’ cookbook indications…

writing in my controller
@illustration = Illustration.new
@illustration.uploaded_file = params[:illustration][:file_data]

and

attr_accessor :file_data

def uploaded_file=(incoming_file)
self.file_name = incoming_file.original_filename
self.file_data = incoming_file
write_attribute ‘extension’, self.file_name.split(’.’).last.downcase
end

makes things running well… need (later) to understand why …

kad