我正在尝试将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列表.为什么?
我试图为我的搜索结果添加 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)