I''m trying to follow an example from ''Agile Web Development
with Rails'' (3rd
ed) which shows how to upload an image file, except that I''m trying to
upload a csv file.
The ''magic'' that the example shows is how the file_field
helper method can
say "file_field("uploaded_file")" when there is actually no
"uploaded_file"
column in the upload table, because the following method can be put in the
model:
def uploaded_file=(upload_field)
self.filename = base_part_of(file_field.original_filename)
# is here is where the uploaded file can be parsed?
FasterCSV.foreach(file.path,:headers=>"first_row",
:col_sep=>"\t") do
|row|
row.each{|row| puts "row: #{row.inspect}"}
end
end
def base_part_of(file_name)
File.basename(file_name)
end
However, this method never seems to fire. Instead, when I upload the file, I
get the error:
ERROR: null value in column "filename" violates not-null
constraint
which, of course, would happen if a record is inserted without assigning the
filename to the upload object.
My code is shown below; would appreciate if anyone can tell me why my
uploaded_file method is not firing:
My model:
<% form_tag (:action=> ''create'', :multipart => true)
do %>
<%= file_field_tag ''uploaded_file'' %>
<p>
<%= submit_tag "Upload" %>
</p>
<% end %>
My controller:
def create
@upload = Upload.new(params[:upload])
respond_to do |format|
if @upload.save
flash[:notice] = ''Upload was successful.''
format.html { redirect_to(@upload) }
format.xml { render :xml => @upload, :status => :created,
:location
=> @upload }
else
format.html { render :action => "new" }
format.xml { render :xml => @upload.errors, :status =>
:unprocessable_entity }
end
end
end
My model:
require ''fastercsv''
def new
@upload = Upload.new
end
def uploaded_file=(upload_field)
self.filename = base_part_of(file_field.original_filename)
# is here is where the uploaded file can be parsed?
FasterCSV.foreach(file.path,:headers=>"first_row",
:col_sep=>"\t") do
|row|
row.each{|row| puts "row: #{row.inspect}"}
end
end
def base_part_of(file_name)
File.basename(file_name)
end
--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.