从Rails导出CSV数据

时间:2013-05-21 03:55:16

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

我正在从rails导出csv数据。我在这里遵循教程:http://railscasts.com/episodes/362-exporting-csv-and-excel?view=asciicast

在我的控制器中我有:

  def show
    # @company is being provided correctly.
    @groups = @company.groups
    render text: @groups.to_csv
  end  

在我的group.rb模型中:

  def self.to_csv
    Rails.logger.info "Hello World"
    CSV.generate do |csv|
      csv << column_names
      all.each do |product|
        csv << product.attributes.values_at(*column_names)
      end
    end
  end

问题是浏览器输出的内容如下:

#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#

即使在重启导轨后,模型方法似乎也被忽略了。任何想法在这里有什么问题?感谢

3 个答案:

答案 0 :(得分:8)

to_csv是一种类方法。意思是它的意思被称为Group.to_csv。您可能希望将方法签名更改为类似Group.to_csv(groups)的内容。

 def self.to_csv(groups)
    Rails.logger.info "Hello World"
    CSV.generate do |csv|
      csv << column_names
      groups.each do |product|
        csv << product.attributes.values_at(*column_names)
      end
    end
  end

然后在show

  def show
    # @company is being provided correctly.
    @groups = @company.groups
    render text: Group.to_csv(@groups)
  end  

答案 1 :(得分:0)

我也遇到了这个问题,这个答案已经解决了: https://stackoverflow.com/a/17311372/3458781

很快,您必须重新启动服务器。希望它适合你。

答案 2 :(得分:0)

rails控制台的快速版本,不是为了prod而是为了访问excel中的数据:

首先:

print TableName.first.attributes.map{|a,v| a}.join(",")
第二步:

TableName.all.each{|t| print t.attributes.map{|a,v| a}.join(",") + "\n"}; nil

在csv文件中复制这两个调用的结果