Ransack导出结果为CSV

我正在尝试将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 

然后是Booking 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列表。 为什么?

要仅将筛选结果导出为csv,您应确保搜索参数包含在您调用以生成csv的URL中。

因此,如果要导出在html页面上看到的结果,则应调用: reports_path(params.merge(format: 'csv')

试试这个:

 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