Возникли проблемы с импортом файла CSV с помощью FasterCSV - PullRequest
3 голосов
/ 16 февраля 2011


Я новичок в Rails и выяснил, как экспортировать результаты из моей базы данных, но у меня возникли проблемы с созданием новых записей из файла CSV. С помощью кода, приведенного ниже, я хочу иметь возможность импортировать файл CSV и заполнить последние два столбца данными сеанса от пользователя. Сейчас я просто вставил статический номер, чтобы попытаться заставить это работать. В настоящее время я получаю сообщение «Не могу преобразовать ActionDispatch :: Http :: UploadedFile в строку» как сообщение об ошибке

CSV ДОКУМЕНТ

имя, задачи, expected_results, require_id Имя теста 1, Открыть файл, Открыть, т Имя теста 2, чтение файла, чтение, т Имя теста 3, Закрыть файл, Закрыть, f

CONTROLLER

  def csv_import  
    file = params[:file]  
    FasterCSV.foreach(file,{:headers => true, :row_sep => :auto}) do |row|  
        Script.create!(:name => row[0],  
                      :task => row[1],  
                      :expected_results => row[2],  
                      :require_id => row[3],    
                      :department_id => 1,  
                      :category_id => 1)  
    end  
  end

VIEW

<%=form_tag '/script_admin/csv_import', :multipart => true do%>
<%= file_field_tag "file" %><br/>
<%= submit_tag("Import") %>
<% end %>

БД МИГРАЦИЯ

class CreateScripts < ActiveRecord::Migration
  def self.up
    create_table :scripts do |t|
      t.integer     :department_id,       :null => false
      t.integer     :category_id,         :null => false
      t.string      :name,                :null => false
      t.string      :task,                :null => false
      t.string      :expected_results,    :null => false
      t.boolean     :require_id,          :null => false,   :default => "t"
      t.timestamps
    end
  end

  def self.down

drop_table :scripts
* +1016 * конец конец

Любая помощь в этом может быть оценена

~ Kyle

1 Ответ

3 голосов
/ 16 февраля 2011

Проблема решена благодаря Джеймсу Грею

  def csv_import
    file = params[:file]
    FCSV.new(file.tempfile, :headers => true).each do |row|
        Script.create!(:name => row[0],
                      :task => row[1],
                      :expected_results => row[2],
                      :require_id => row[3],
                      :department_id => 1,
                      :category_id => 1)
    end
  end
...