5

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

4

2 回答 2

12

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

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

于 2013-06-14T17:20:08.043 回答
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
于 2013-07-03T18:23:22.727 回答