【问题标题】:How to create a dynamic csv export file?如何创建动态 csv 导出文件?
【发布时间】:2019-08-19 04:01:22
【问题描述】:

我创建了一个简单的 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:

SELECT "orders".* FROM "orders" WHERE "orders"."seller_id" = $1 AND "orders"."order_status" = $2 AND (date(created_at) BETWEEN NULL AND 空)

当我导出时,除了标题之外什么都没有导出。

我怎样才能成功地做到这一点?

【问题讨论】:

    标签: ruby-on-rails ruby csv export-to-csv


    【解决方案1】:

    基本上,当您单击任何链接时,它会发送获取请求。在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 %>
    

    如果您不想使用表单,我可以更新答案以提供另一种解决方案。

    【讨论】:

    • 嗯,如果我更新我的控制器看起来不错。我最终根据这篇文章做了这样的事情:stackoverflow.com/questions/49051223/…
    • 所以我尝试使用 form_tag 并得到“无法引用 ActionController::Parameters”.... 至于不使用表单;你会建议一个更好的方法来完成这个吗?
    • 能分享一下日志吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多