这可能是我的一个巨大疏忽,但我已经搜索了大约一个小时的修复程序,但没有成功!
我正在学习有关将数据导出到.CSV 的RailsCast教程
我用来填充CSV的数据来自Ransack查询(在params中)
然而,被吐出的数据是数据对象的集合,而不是原始数据本身——
浏览器中的输出:
#<Order:0x007f820823c738>,#<Order:0x007f82082ad708>,#<Order:0x007f82082ace98>,
#<Order:0x007f82082ac718>
我只是想得到同样的物体,但只是打印出来。。。类似于RailsCasts教程(屏幕截图)
这是我的订单_控制器
def index
@search = Order.search(params[:q])
@orders = @search.result
@results = @orders
respond_to do |format|
format.html # index.html.erb
format.csv { render text: @results.to_csv }
end
end
那么,有没有一种简单的方法可以像教程中那样将这些数据对象转换为原始字符串呢?
编辑
这是我的模型中的to_csv
方法
def self.to_csv(options = {})
CSV.generate(options) do |csv|
csv << column_names
all.each do |order|
csv << order.attributes.values_at(*column_names)
end
end
end
所以我认为这就是问题所在:@search.result
是Orders的数组,所以@results.to_csv
正在调用Array#to_csv
方法。由于您没有得到ActiveRecord::Relation
,您可能需要以不同的方式转换为csv。
在lib
:中创建ransack_helpers.rb
模块
module RansackHelpers
def self.to_csv(ransack_result, options = {})
CSV.generate(options) do |csv|
result_array = ransack_result.result
column_names = result_array.first.class.column_names
csv << column_names
result_array.each do |item|
csv << item.attributes.values_at(*column_names)
end
end
end
end
在orders_controller.rb
:中
def index
@search = Order.search(params[:q])
@orders = @search.result
respond_to do |format|
format.html # index.html.erb
format.csv { render text: RansackHelpers.to_csv(@search) }
end
end
我还没有测试过这个代码,所以可能会有一些问题,但我认为这就是你想要做的