如何将数据转换为Excel文件

我正在使用CSV类将数据转换为基于http://railscasts.com/episodes/362-exporting-csv-and-excel的Excel文件。

在下载Excel文件时,它不会更新我使用filter在我的网页上看到的最新数据。 我的Excel文件包含首次加载页面时显示的数据。

我试图debugging该问题,并尝试像xlsx_writer其他gem,得到相同的结果:

def commission_report today = Date.today if params[:from_date].present? from_date = params[:from_date] to_date = params[:to_date] elsif params[:filter] == 'monthly' to_date = today from_date = today - 30 else to_date = today from_date = today - 7 end @commissions_report = UserOrderHistory.select("user_order_histories.*,SUM(user_order_histories.revenue_sharing) as revenue_total, restaurants.restaurant_name, managers.username,revenue_sharings.revenue").joins("LEFT JOIN revenue_sharings ON revenue_sharings.restaurant_id = user_order_histories.restaurant_id").joins("LEFT JOIN restaurants ON restaurants.id = user_order_histories.restaurant_id").joins("LEFT JOIN managers ON managers.id = restaurants.manager_id").where("user_order_histories.status != ''").where("revenue_sharing > 0").group("user_order_histories.restaurant_id,user_order_histories.deduction_date").where("user_order_histories.deduction_date BETWEEN ? AND ?",from_date,to_date).order(sort_column + " " + sort_direction) @commissions_report = @commissions_report.as_json @commissions_report = Kaminari.paginate_array(@commissions_report).page(params[:page]).per(10) # raise @commissions.inspect respond_to do |format| format.html format.csv { send_data @commissions_report.to_csv } format.xls #{ send_data @commissions_report.to_csv(col_sep: "\t") } end end 

当您正在进行过滤的请求下载CSV时,参数不被parsing:

 <%= link_to 'Download CSV', your_path(from_date: params[:from_date], to_date: params[:to_date], filter: params[:filter]) %> 

这样你的参数将被送回你的控制器。

这是因为当你点击时:

 link_to "CSV", products_path(format: "csv") 

它转到产品控制器中的索引方法,并在该方法中再次从DB获取所有logging:

 @products = Product.order(:name) 

因此,您只需将收集的过滤产品传递给CSV格式的回复。 像这样的东西:

 format.csv { send_data @filtered_products.to_csv }