我正在将自定义数组导出到csv文件。一切都正确导出,但它不是在每个实例之间添加逗号分隔符。我的代码中缺少什么来添加这种分离?
data_services_controller
def export_all
@list = DataService.all
respond_to do |format|
format.csv { render text: @list.to_csv }
end
end
data_service.rb
def self.to_csv
CSV.generate do |csv|
csv << ["Data Product", "Requestor"]
all.each do |dp|
csv << [dp.name ,dp.requestor]
end
end
end
list.html.erb
<%= link_to "Export to CSV", export_all_data_services_path(:format => :csv), :class => "btn btn-primary" %>
答案 0 :(得分:0)
@ list.to_csv正在调用DataServive.all返回的关系上的to_csv方法,而不是您定义的类方法。
format.csv { render text: DataService.to_csv }
调用你的to_csv类方法。你不会需要@list实例变量。
答案 1 :(得分:0)
我注意到在控制器中调用了一个错误的方法,你不能用实例变量调用类方法。您可以按照以下步骤重写控制器操作,并使用send_data
而不是render text
。
def export_all
respond_to do |format|
format.csv { send_data DataService.to_csv }
end
end
您已经在to_csv
方法中迭代所有DataService,因此我不需要在export_all
操作中进行查询。如果您想使用@list
任何其他目的,那么您可以使用它。