Name = upload['datafile'].original_filename

At: http://www.tutorialspoint.com/ruby-on-rails/rails-file-uploading.htm

And, regarding:

name = upload['datafile'].original_filename

It mentions that "upload" is a CGI object.

If you look at the header of the function this line is part of:

  def self.save(upload)

It seems that there is an argument "upload".

But, in the body, when we say:

upload['datafile']

Is "upload" here the same as the passed argument?

And, what about ['datafile'], what does it represent here? And, from
where is it passed?

Thanks.

···

--
Posted via http://www.ruby-forum.com/.

Abder-Rahman Ali wrote:

Is "upload" here the same as the passed argument?

Yes. Just to be clear, the code here is:

  def self.save(upload)
    name = upload['datafile'].original_filename

And, what about ['datafile'], what does it represent here?

It's a method call on the object passed as upload. You are calling the
method called '', and passing the string 'datafile' as the argument.

What this actually does, depends on what the object 'upload' is. All you
can tell from the above is that it implements a method called which
takes a string argument. It could be a Hash, for example, in which case
upload['datafile'] would retrieve the value keyed by 'datafile'.

But it could be some other custom object. For example:

class Foo
  def (key)
    puts "Called with key #{key.inspect}"
    "hello"
  end
end

f = Foo.new
result = f["datafile"] # Called with key "datafile"
puts result # hello

That's the joy of duck-typing. You don't care what class an object is,
only what methods it responds to.

···

--
Posted via http://www.ruby-forum.com/\.

Thanks a lot @Brian for this nice clarification.

···

--
Posted via http://www.ruby-forum.com/.