How to validate presence of an uploaded file in rails?
Posted
by brad
on Stack Overflow
See other posts from Stack Overflow
or by brad
Published on 2010-03-16T10:01:14Z
Indexed on
2010/03/17
9:31 UTC
Read the original article
Hit count: 334
I'm playing around creating a rails file uploader and have struck a problem that should have an obvious solution. How do I check that a file has been selected in my form and uploaded?
Here is my new.html.erb view
<h2>Upload File</h2>
<% form_for(@upload_file, :url => {:action => 'save'}, :html => {:multipart => true}) do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :file -%>
<%= f.file_field :upload -%>
</p>
<p>
<%= f.label :description %>
<%= f.text_field :description %>
</p>
<p>
<%= f.label :file_type %>
<%= f.select :file_type, ["XML Data"] %>
</p>
<p><%= f.submit 'Upload File' %></p>
<% end %>
and here is my upload_file.rb model
class UploadFile < ActiveRecord::Base
validates_presence_of :description
validates_presence_of :file_type
validates_presence_of :upload
def upload=(upload_file_field)
self.name = "#{Time.now.strftime("%Y%m%d%H%M%S")}_#{upload_file_field.original_filename}"
File.open("#{RAILS_ROOT}/public/upload/#{self.name}", "wb") { |f| f.write(upload_file_field.read) }
end
end
If I use this as shown here, the validation validates_presence_of :upload
always fails and I am returned to my form with an error message.
I'd be very grateful if someone could explain how to do this validation correctly, and I'd be even more grateful if they could explain why it works.
Thanks.
© Stack Overflow or respective owner