ruby-on-rails - 未初始化的常量 CustomersController::CSV

标签 ruby-on-rails file-upload csv

我正在学习教程 http://www.funonrails.com/2012/01/csv-file-importexport-in-rails-3.html]用于在 rails 3 中上传文件,因为我需要我的应用程序的用户可以上传 csv 文件,但是当我尝试保存文件时,我得到:未初始化的常量 CustomersController::CSV 消息,在更改我的路线以获取“客户/导入”以发布“客户/导入”之前,我遇到了其他错误 没有路由匹配 [POST] "/customers/import"我做错了什么?提前致谢。

我的 Controller :

class CustomersController < ApplicationController
  def import
    if request.post? && params[:file].present?
      infile = params[:file].read
      n, errs = 0, []
      CSV.parse(infile) do |row|
        n += 1
        # SKIP: header i.e. first row OR blank row
        next if n == 1 or row.join.blank?
        # build_from_csv method will map customer attributes & 
        # build new customer record
        customer = Customer.build_from_csv(row)
        # Save upon valid 
        # otherwise collect error records to export
        if customer.valid?
          customer.save
        else
          errs << row
        end
      end
      # Export Error file for later upload upon correction
      if errs.any?
        errFile ="errors_#{Date.today.strftime('%d%b%y')}.csv"
        errs.insert(0, Customer.csv_header)
        errCSV = CSV.generate do |csv|
          errs.each {|row| csv << row}
        end
        send_data errCSV,
          :type => 'text/csv; charset=iso-8859-1; header=present',
          :disposition => "attachment; filename=#{errFile}.csv"
      else
        flash[:notice] = I18n.t('customer.import.success')
        redirect_to import_url #GET
      end
    end
  end
end

我的型号:
class Customer < ActiveRecord::Base
  scope :active, where(:active => true)
  scope :latest, order('created_at desc')
  def self.csv_header
    "First Name,Last Name,Email,Phone,Mobile, Address, FAX, City".split(',')
  end

  def self.build_from_csv(row)
    # find existing customer from email or create new
    cust = find_or_initialize_by_email(row[2])
    cust.attributes ={:first_name => row[0],
                      :last_name => row[1],
                      :email => row[3],
                      :phone => row[4],
                      :mobile => row[5],
                      :address => row[6],
                      :fax => row[7],
                      :city => row[8]}
    return cust
  end

  def to_csv
    [first_name, last_name, email, phone, mobile, address, fax, city]
  end
end

*我的看法:
<h1>Subir Archivos</h1>

<%= form_tag('import', :multipart => true) do %>
  <p>
    File:<br />
    <%= file_field_tag 'file' %><br />
  </p>
  <p>
    <%= submit_tag "subir" %>
  </p>
<% end %>

我的路线:
Pruebaupcsv::Application.routes.draw do
post "customers/import"

最佳答案

您需要添加一个 require 'csv'在使用它之前,无论是在初始化程序中,还是在 Controller 的顶部。

关于ruby-on-rails - 未初始化的常量 CustomersController::CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10502864/

相关文章:

javascript - capybara 无法找到链接 "Delete Comment"

ruby-on-rails - 将 HTML 转换为适当的纯文本?

ruby-on-rails - 除了在 Rails Controller 中使用局部变量之外,还有更好的替代方法吗?

javascript - 使用 Javascript 中的 Dropbox Core API 将文件上传到 Dropbox

java - 如何在 Android 中通过 http 协议(protocol)将多个文件和文本同时发送到服务器?

java - 查找 2 个 csv 文件差异的有效方法

mysql - 使用过滤器上传 csv 文件

ruby-on-rails - 什么时候用delegate,什么时候用has_one :through?

javascript - 尝试访问 &lt;input&gt; 文件时无法读取未定义的属性 'target'

java - 读取带有换行符的csv文件作为数据java