File is nil


I don’t understand why my program does not get the file that I try to
It returns the following error when I try to upload a small file:

NoMethodError in LogfileController#create

You have a nil object when you didn’t expect it!
The error occured while evaluating nil.original_filename

#{RAILS_ROOT}/app/models/logfile.rb:9:in file=' #{RAILS_ROOT}/app/controllers/logfile_controller.rb:31:increate’

Parameters: {“logfile”=> {“fileName”=>#StringIO:0x39c3fc0},

This is the code in view:

<%= form_tag({:action => ‘simple_save’},
{:method => “post”, :multipart => true}) %>

<%= submit_tag “Simple Save” %>
<%= end_form_tag %>

This is the code in the controller:

def create

@logfile.file= @params[‘logfile_fileName’]


And the Model is nearly identical to the code in here:

Is it because I don’t have a file field in my database? The database
keeps the name of the file and some information related to it. I want
to save the file locally only, not to the database.

Please help! I’ve been stuck for DAYS.

Thank you in advance.


Oh. My. Goodness.

What was missing was the the length of character input the html.
So I went overboard with the input size.

My view now reads:


Hi –

On Wed, 7 Jun 2006, Lisa wrote:

#{RAILS_ROOT}/app/controllers/logfile_controller.rb:31:in `create’

Parameters: {“logfile”=> {“fileName”=>#StringIO:0x39c3fc0},
@logfile.file= @params[‘logfile_fileName’]

Those don’t match. Try:

@logfile.file = params[‘logfile’][‘fileName’]


David A. Black (removed_email_address@domain.invalid)


Here’s your problem:

2006/6/7, Lisa removed_email_address@domain.invalid:

Parameters: {“logfile”=> {“fileName”=>#StringIO:0x39c3fc0},

  @logfile.file= params['logfile_fileName']

You’re tring to access the ‘logfile_fileName’ key of params, but
params only has a ‘logfile’ and a ‘commit’ key. But, the param
‘logfile’ is itself a hash, with a key ‘fileName’, so what you really
want is:

@logfile.file= params[‘logfile’][‘fileName’]

When you have an underscore in the param name, Rails groups the params
by prefix. Here, the prefix is ‘logfile’, so you get a hash saved
under ‘logfile’ with all the params which start ‘logfile_’, rather
than accessing the params ‘logfile’ itself.

This is especially useful when, say, you want to create two model
objects, and you want to initialise them from a hash. This way you can
have fileds ‘alpha_name’, ‘alpha_address’ and ‘beta_name’ and
‘beta_age’, which will give you two hashes, params[‘alpha’] and
params[‘beta’]. Have a look in the documentation under form helpers to
learn more about how this works.



Thank you all so much!

Everyone in the Ruby community has been so helpful.

I have to admit this is scaffold withdrawal, but I honestly tried to
read the documentation (I just didn’t know where to start). Much of it
is still magic and mystics to me, but I hope to become better at it.

Thanks again.



It’s not @params['logfile_fileName'] but