Ruby on rails File Upload -


today have little problem containing file upload.

first infos:

rubyversion: 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux] railsversion: rails 3.1.1

needed code: form

        <%= form_for @label, :html => { :multipart => true } |f| %>             <% if @label.errors.any? %>                     <div id="error_explanation">                             <h2><%= pluralize(@label.errors.count, "error") %> prohibited label being saved:</h2>                              <ul>                             <% @label.errors.full_messages.each |msg| %>                                     <li><%= msg %></li>                             <% end %>                             </ul>                     </div>             <% end %>             <div class="field">                     <%= f.label :file %><br />                     <%= f.file_field :file %>             </div>             <div class="actions">                     <%= f.submit %>             </div>     <% end %> 

my model:

class label < activerecord::base     attr_accessor :file     attr_reader :file      def file=(file)             log = logger.new(rails.root.join("log/label.log").to_s)             log.info "file-action called"             path=file.tempfile.to_path.to_s             filename="labellist.csv"             dest=rails.root.join("app/assets/csv/").join(filename).to_s             fileutils.cp(path, dest)             csv=csvlabelparser.new             log.info "new parser initialized!"             csv.parse_csv(dest)             log.info "variables: path: #{path.inspect} <-----> dest: #{dest.inspect}"     end end 

my parser

class csvlabelparser     require 'csv'      def initialize             @logger=logger.new(rails.root.join("log/parser.log").to_s)     end      def logger             @logger     end      def parse_csv(path)             counter = 0             read_handle = file.open(path, "rb")             content = read_handle.read             self.logger.info "content: #{content.inspect}"             read_handle.close              content.each_line |line|                     if counter != 0                             csv_array=line.split(";")                             self.logger.info "csv-array no. #{counter}: #{csv_array.inspect}"                             label=label.new                              label.labnr=csv_array[10]                             label.name=csv_array[0]                             label.firm1=csv_array[3]                             label.firm2=csv_array[4]                             label.postal=csv_array[7]                             label.city=csv_array[8]                             label.country=csv_array[9]                             label.street=csv_array[5]                             label.pob=csv_array[6]                             label.save                     end                     counter += 1             end     end  end 

controller-log

# logfile created on 2012-06-06 09:49:23 +0200 logger.rb/31641 controller-create-method called! => variables: params: {"utf8"=>"✓", "authenticity_token"=>"l+fpimqfa9qe9u/lxu+atfont8e3l5xeuum1321mrng=", "label"=>{"file"=>#<actiondispatch::http::uploadedfile:0x00000003df2318 @original_filename="adrbw076-q.csv", @content_type="text/csv", @headers="content-disposition: form-data; name=\"label[file]\"; filename=\"adrbw076-q.csv\"\r\ncontent-type: text/csv\r\n", @tempfile=#<file:/tmp/rackmultipart20120606-2741-1izzofa>>}, "commit"=>"create label", "action"=>"create", "controller"=>"labels"}<-----> label: #<label id: nil, labnr: nil, name: nil, firm1: nil, firm2: nil, postal: nil, city: nil, country: nil, street: nil, pob: nil, created_at: nil, updated_at: nil> 

so! can see want upload csv-file parse database. copy of file should stored in folder called csv later use. i've done 5 times before , worked well, time seems, file-method in model isn't called. want work nothing more there changes catch errors , stuff in future ;). i've logged controller action, called every time. may logfile can you! me looks okay, comparing other logfiles. i've searched solution, looks okay me (maybe i've forgotten : or ,), can't what's wrong!

thanks help

i have solution!

i using rails 3.1.1 ruby 1.9.3 , it's gemset. problem new feature "attr_accessible". not used in rails 3.1.1 became necessary make :file-field accessible due newer gemset. solution simple, had add:

attr_accessible :file, ect 

to top of model , worked fine!


Comments

Popular posts from this blog

django - How can I change user group without delete record -

java - Need to add SOAP security token -

java - EclipseLink JPA Object is not a known entity type -