I have an app whose admin allows users to upload PDFs to populate a
"newsletter" section.
I''m having trouble getting validation to work properly.
I want to be sure that a name, description & file are specified in the
form.
The app seems to catch the error and won''t write a row to the DB but it
will create a file sized 0KB in the upload folder and it won''t show the
error messages for that model. (using error_messages_for...)
CODE IS BELOW...Thanks
---CONTROLER----
def add_newsletter
@newsletter = Newsletter.new(params[:newsletter])
if @newsletter.save
flash[:notice] = "Added a newsletter: #{@newsletter.name}"
redirect_to(:action=>''newsletter'')
end
end
----MODEL----
class Newsletter < ActiveRecord::Base
validates_presence_of :name, :summary, :filename
def newsletter=(newsletter_field)
self.filename = sanitize_filename(newsletter_field.original_filename)
self.filename = Time.now.strftime("%H%M%S")+self.filename
#self.data = element_field.read
File.open("#{RAILS_ROOT}/public/newsletters/#{self.filename}","wb")
{
|f| f.write(newsletter_field.read)}
end
private
def sanitize_filename(value)
just_filename = value.gsub(/^.*(\\|\/)/, '''')
@filename = just_filename.gsub(/[^\w\.\-]/,''_'')
end
end
--VIEW--
<h3>Add a New Newsletter</h3>
<%= form_tag({:action=>''add_newsletter''},
:multipart=>true) %>
<table>
<tr>
<td>Title</td>
<td><%=text_field(:newsletter,:name)%></td>
</tr>
<tr>
<td>Publication Date</td>
<td><%=date_select(:newsletter,:pubDate,:order=>[:month,:day,:year])%></td>
</tr>
<tr>
<td>PDF File</td>
<td><%=file_field(:newsletter,:newsletter)%></td>
</tr>
<tr>
<td valign="top">Description</td>
<td><%=text_area(:newsletter,:summary)%></td>
</tr>
<tr>
<td colspan="2"
align="right"><%=submit_tag("Add
Newsletter")%></td>
</tr>
</table>
<%= end_form_tag %>
--
Posted via http://www.ruby-forum.com/.