I am using Rails 2.1 (and RUBYGEMS VERSION: 1.5.0 RUBY VERSION: 1.8.7) and 
have been having a *devil* of a time trying to get a simple thing to work: 
upload and process a CSV file.
After extensively researching many examples both here and elsewhere, I have 
not been successful in getting this work; yet, I feel I'm so close!
So, I am in hopes that someone here  could please point out my (hopefully 
slight) errors below; my current bug is in the first lines of the 
controller. 

Once this part is working, I'll finish the code that parses the file and 
stores the data into the database. I do not need to store the uploaded file 
itself, though I am storing the name of the file that gets uploaded (in the 
Upload table). I also realize it is better style to have 'fat models and 
thin controllers' but I'm just trying to get this work.

Thanks in advance to anyone who can help!

*the view code:*
<% form_for(:upload,
             :url => {:action=> :create},
             :html => { :multipart => true} ) do |form| %>
             
  Upload your file: <%= form.file_field("upload_file",:size=>50,:class => 
"csv-input") %><br/>
  
  <%= submit_tag("Upload") %>
  
<% end %>

*the controller code:*
 def create
    @upload = Upload.new(params[:upload][:upload_file])
    thefile = File.new(params[:upload][:upload_file])
    @upload.filename = base_part_of(thefile.original_filename)
    @upload.assign_name(thisfilename)    
    @upload.call(parse_file(params[:upload_file]))

    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

def parse_file(file)    
    FasterCSV.foreach(file.path,:headers=>"first_row", :col_sep=>"\t") do 
|row|
      row.each{|row| puts "row: #{row.inspect}"}
end
  
*the model code:*
 def new
    @upload = Upload.new
  end
  
 
  def assign_name(n)
    @upload.filename = n
  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 [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to