从Rails导出CSV数据

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也是如此。这里有什么问题?

另外,模型Rails.logger.info未被记录在开发日志文件中。 - AnApprentice
3个回答

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  

3
在关联中使用类方法并没有问题,Rails已经为你进行了作用域处理。详情请参考:http://api.rubyonrails.org/classes/ActiveRecord/Scoping/Named/ClassMethods.html - Shawn Balestracci
如何设置背景颜色。 - Giridharan

0

一个适用于 Rails 控制台的快速版本,不是用于生产环境,只是为了在 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 文件中


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接