我正在使用ruby csv库。当我尝试下载多个记录时,它工作正常,并以CSV文件下载所有记录。
@assets = Asset.all
respond_to do |f|
f.html
f.csv { send_data @assets.to_csv }
f.xls { send_data @assets.to_csv(col_sep: "\t") }
end
但是当我试图下载单曲时。这是错误
未定义的方法`to_csv'
这是我单个记录的代码。
@assets = Asset.last
respond_to do |f|
f.html
f.csv {
send_data @assets.to_csv
}
end
这是我的to_csv代码
def self.to_csv(options = {})
CSV.generate(options) do |f|
f << column_names
all.each do |asset|
f << asset.attributes.values_at(*column_names)
end
end
end
答案 0 :(得分:2)
这里的问题是to_csv
方法应该在ActiveRecord
集合而不是单个记录上调用。
我相信你得到的错误必须
NoMethodError:未定义的方法`to_csv&#39;对于#&lt;资产:0x0000000xxxx&GT;
更改
@assets = Asset.last
到
@assets = Asset.limit(1).order(id: :desc)
因此,您可以稍微调整一下代码以将集合传递给to_csv
并且它可以正常工作
@assets = Asset.limit(1).order(id: :desc)
respond_to do |f|
f.html
f.csv {
send_data @assets.to_csv
}
end
修改强>
这是一种解决方法,但它可以正常工作
# If you only want the last record
@assets = Asset.limit(1).order(id: :desc)
# If you know the id or a specific condition
@assets = Asset.where(id: 1).limit(1)