ruby-on-rails 从Rails导出CSV数据

8yoxcaq7  于 2023-02-17  发布在  Ruby
关注(0)|答案(3)|浏览(114)

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

在我的组. 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

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

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

model方法似乎被忽略了,即使在Rails重新启动之后也是如此。

wko9yo5t

wko9yo5t1#

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
zrfyljdw

zrfyljdw2#

我也遇到了这个问题,这个问题已经被这个答案解决了:https://stackoverflow.com/a/17311372/3458781
很快,你必须重新启动你的服务器。希望它对你有用。

juud5qan

juud5qan3#

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文件中复制这两个调用的结果

相关问题