【发布时间】:2018-05-11 00:59:54
【问题描述】:
我正在 Rails 应用程序中进行 CSV 导出。
数据从后端 API 作为 JSON 数组返回。
但是现在我在 export_data 方法中遇到"undefined method 'to_csv' for #Hash:0x007f149a5ff978" 错误。
我在 config/application.rb 文件中包含了require "csv",并且服务器重启了。
不知道我做错了什么。
index.html.erb
<a href="usage_metrics/export_data.csv"><button class="btn btn-default">Export to CSV</button></a>
usage_controller(前端)
def export_data
rest_resource = RestClient::Resource.new( ENV['USAGE_METRICS_API'] + '/get_events_data', :verify_ssl => false )
request = rest_resource.get :Authorization => cookies.signed[:remember_token], :content_type => 'application/json'
@events_data = JSON.parse(request)
respond_to do |format|
format.html
format.csv { send_data @events_data.to_csv }
end
end
def self.to_csv
CSV.generate do |csv|
csv << column_names
all.each do |event|
csv << event.attributes.values_at(*column_names)
end
end
end
【问题讨论】:
-
all.each?到底是什么? -
您的
self.to_csv方法应包含在模型中,而不是控制器中。即使您正确调用它,它也不适合您实际使用的 JSON 对象。您需要编写一个自定义序列化,将您的@events_dataJSON 对象转换为 CSV。 -
对于我的应用,前端没有模型逻辑,应该来自后端。
标签: ruby-on-rails csv