我已经创建了一个简单的csv导出生成器,但是希望能够传递created_at参数,然后基于2个日期导出并在所选日期之间导出记录。
查看:
<%= date_select :start_date, @start_date%>
<%= date_select :end_date, @end_date %>
<%= link_to("Generate Report", report_path(format: :csv) %>
续:
def order_report
@start_date = params[:start_date]
@end_date = params[:end_date]
@user_orders = Order.where(seller_id: current_user).where(order_status: 2).where(["date(created_at) BETWEEN ? AND ? ", @start_date, @end_date])
respond_to do |format|
format.html
format.csv { send_data @user_orders.to_csv, filename: "orders-#{Date.today}.csv" }
end
end
型号:
def self.to_csv
CSV.generate do |csv|
csv << %w{ id created_at order_type order_price }
all.each do |order|
csv << [order.id, order.ctreated_at, order.order_type, order.order_price ]
end
end
end
但是结果为NULL:
选择“ orders”。*从“ orders”中的“ orders”中。“ seller_id” = $ 1 AND “ orders”。“ order_status” = $ 2 AND(date(created_at)在NULL AND之间 NULL)
当我导出时,除了标题外什么也不会导出。
我如何成功做到这一点?
答案 0 :(得分:0)
基本上,当您单击任何链接时,它都会发送get请求。要在get请求中传递参数,您需要使用query parameter。
有很多传递参数的方法,但我将向您展示简单的路径
简单的解决方案是替换您的代码以使用表单并提交
<%= form_tag report_path(format: :csv), method: :get do %>
<%= date_select :start_date, @start_date%>
<%= date_select :end_date, @end_date %>
<%= submit_button "Generate Report" %>
<% end %>
如果您不想使用表格,我可以更新答案以提供其他解决方案。