我正在从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
问题是浏览器输出的内容如下:
#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
即使在重启导轨后,模型方法似乎也被忽略了。任何想法在这里有什么问题?感谢
答案 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文件中复制这两个调用的结果