相关疑难解决方法(0)

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
Run Code Online (Sandbox Code Playgroud)

然后是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
Run Code Online (Sandbox Code Playgroud)

然而,每次,我都会得到未经过滤的current_user.bookings列表.为什么?

ruby-on-rails ransack

5
推荐指数
1
解决办法
2812
查看次数

无法将未经允许的参数转换为哈希轨道

我试图为我的搜索结果添加 csv,但它会抛出错误,告知未经允许的参数。我应该在 csv 链接中传递哪些参数?这样 csv 将只下载搜索结果。

报告控制器

def revenue_search
  @bookings = Booking.complete.order("created_at DESC")
  date = "1-#{params['date']['month']}-#{params['date']['year']}"
  date = Date.parse(date)
  @bookings = @bookings.where(created_at: date.beginning_of_month..date.end_of_month)
  @per_page = params[:per_page] || Booking.per_page || 20
  @bookings = @bookings.paginate( :per_page => @per_page, :page => params[:page])
  if params[:currency].present?
    @bookings = @bookings.where(currency: params[:currency])
  end
  respond_to do |format|
    format.html
    format.csv { send_data @bookings.revenue_csv }
  end
end
Run Code Online (Sandbox Code Playgroud)

模型

def self.revenue_csv
  attributes = %w{ total value deposit balance }
  CSV.generate(headers: true) do |csv|
   csv << attributes
   all.each do |booking|
    csv << …
Run Code Online (Sandbox Code Playgroud)

ruby csv ruby-on-rails

5
推荐指数
1
解决办法
5753
查看次数

标签 统计

ruby-on-rails ×2

csv ×1

ransack ×1

ruby ×1