3

我正在努力从 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

问题是浏览器只输出以下内容:

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

即使在 rails 重新启动后,模型方法似乎也被忽略了。有什么想法吗?谢谢

4

3 回答 3

8

to_csv是一个类方法。这意味着它的意思是被称为 like 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  
于 2013-05-21T03:57:49.370 回答
0

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

很快,您必须重新启动服务器。希望对你有效。

于 2014-04-25T08:13:43.827 回答
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 文件中

于 2016-10-20T03:14:42.443 回答