Ransack导出结果为CSV

时间:2013-06-07 15:03:00

标签: ruby-on-rails ransack

我正在尝试将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列表。为什么呢?

2 个答案:

答案 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