CSV输出上的ArgumentError

时间:2012-02-16 12:59:52

标签: ruby-on-rails ruby-on-rails-3

尝试生成CSV时出现以下错误:

ProductsController中的ArgumentError#schedulecsv

错误的参数数量(0表示1)

我的产品控制器设置如下:

 def schedulecsv
 products = Product.find(:all)
 filename ="schedule_#{Date.today.strftime('%d%b%y')}"
  csv_data = CSV.generate do |csv|
    csv << Product.csv_header
      products.each do |p|
        csv << p.to_csv
      end
  end
  send_data csv_data,
  :type => 'text/csv; charset=iso-8859-1; header=present',
  :disposition => "attachment; filename=#{filename}.csv"
 end   

有没有人在这里有任何指示?让我疯狂!

谢谢!

1 个答案:

答案 0 :(得分:1)

来自csv.rb的来源/ usr / lib / ruby​​ /(ruby gem的版本)/csv.rb(在我的机器上)

以下是CSV类的generate方法

的源代码
def CSV.generate(path, fs = nil, rs = nil, &block)
  open_writer(path, 'w', fs, rs, &block)
end

generate方法需要filename作为parameter.it将使文件具有给定名称,但您正在调用CSV.generate文件名错过了

所以你必须在生成调用中传递文件名!

filename ="schedule_#{Date.today.strftime('%d%b%y')}"
CSV.generate filename do |csv|
  csv << Product.csv_header
  products.each do |p|
    csv << p.to_csv
  end
end