We're using Paperclip for file uploads and recent edge Rails rendered our user profile forms unusable.
File uploads don't break our application when there was an actual file upload; what breaks Paperclip is the case when *nothing was selected* in the file input. The form is still sent with multipart encoding and parsed by Rack, which creates a Tempfile *regardless* of whether some data was received or not.
The result of Rack processing a single file field is a hash with these keys: {:filename, :type, :name, :tempfile, :head}.
Rails further processes this in ActionController::UrlEncodedPairParser.get_typed_value. When it sees the above formatted hash, it replaces it with the Tempfile object it references and applies other metadata, like filename, as properties of this object.
In short, when a "user[avatar]" file field was sent empty, *older* Rails version would receive nothing:
params[:user][:avatar] # => nil
*Now* a Tempfile is received in any case:
params[:user][:avatar] # => #<File:/tmp/RackMultipart.xxxyyy>
So naturally Paperclip thinks a file was uploaded and explodes because this object has nil value `original_filename` and a size of 0.
Do you think this should be handled in Rails or Rack?