如何将数据转换为 Excel 文件
How to convert data into an Excel file
我正在使用 CSV class 将数据转换为基于 http://railscasts.com/episodes/362-exporting-csv-and-excel 的 Excel 文件。
下载 Excel 文件后,它没有更新我在我的网页上使用过滤器看到的最新数据。我的 Excel 文件包含页面首次加载时显示的数据。
我尝试调试问题并尝试其他 gem,如 xlsx_writer,得到相同的结果:
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
这是因为当您点击:
link_to "CSV", products_path(format: "csv")
它转到产品控制器中的索引方法,在该方法中您再次从数据库中获取所有记录:
@products = Product.order(:name)
因此,您所要做的就是将过滤后的产品集合传递给 CSV 格式的响应。像这样:
format.csv { send_data @filtered_products.to_csv }
当您发出下载 CSV 文件的过滤请求时,参数未被解析:
<%= link_to 'Download CSV', your_path(from_date: params[:from_date], to_date: params[:to_date], filter: params[:filter]) %>
这样您的参数将再次发送回您的控制器。
我正在使用 CSV class 将数据转换为基于 http://railscasts.com/episodes/362-exporting-csv-and-excel 的 Excel 文件。
下载 Excel 文件后,它没有更新我在我的网页上使用过滤器看到的最新数据。我的 Excel 文件包含页面首次加载时显示的数据。
我尝试调试问题并尝试其他 gem,如 xlsx_writer,得到相同的结果:
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
这是因为当您点击:
link_to "CSV", products_path(format: "csv")
它转到产品控制器中的索引方法,在该方法中您再次从数据库中获取所有记录:
@products = Product.order(:name)
因此,您所要做的就是将过滤后的产品集合传递给 CSV 格式的响应。像这样:
format.csv { send_data @filtered_products.to_csv }
当您发出下载 CSV 文件的过滤请求时,参数未被解析:
<%= link_to 'Download CSV', your_path(from_date: params[:from_date], to_date: params[:to_date], filter: params[:filter]) %>
这样您的参数将再次发送回您的控制器。