我正在尝试将Ransack(Railscast)结果列表导出到CSV文件(Railcast)。但是,它会持续导出所有对象,而不是Ransack搜索返回的结果。谁能告诉我哪里出错了?
在Reports控制器中,我尝试传递@bookings和@ search.result:
def index
@search = current_user.bookings.search(params[:q])
@bookings = @search.result
@search.build_condition
respond_to do |format|
format.html
format.csv { render text: Booking.to_csv(@bookings) }\
end
end
然后预订to_csv方法:
def self.to_csv list
CSV.generate do |csv|
csv << column_names
list.each do |booking|
csv << booking.attributes.values_at(*column_names)
end
end
end
然而,每次,我都会得到未经过滤的current_user.bookings列表。为什么呢?
答案 0 :(得分:12)
要仅将过滤后的结果导出为csv,您应确保搜索参数包含在您调用以生成csv的URL中。
因此,如果您要导出在html页面上看到的结果,您应该调用:
reports_path(params.merge(format: 'csv')
答案 1 :(得分:1)
试试这个:
def index
session[:q] = params[:q] if params[:q]
@search = current_user.bookings.search(session[:q])
@bookings = @search.result
@search.build_condition
respond_to do |format|
format.html
format.csv { render text: Booking.to_csv(@bookings) }\
end
end