Как создать динамический файл экспорта CSV? - PullRequest
0 голосов
/ 28 марта 2019

Я создал простой генератор экспорта в csv, но хотел бы иметь возможность передавать параметры созданного_атата для последующего экспорта на основе 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:

ВЫБРАТЬ "заказы". * ИЗ "заказов" ГДЕ "заказы". "Seller_id" = $ 1 И "заказы". "Order_status" = $ 2 И (date (made_at) МЕЖДУ НУЛЬ И И НУЛЬ)

Когда я экспортирую, ничего не экспортирует, кроме заголовков.

Как я могу успешно это сделать?

1 Ответ

0 голосов
/ 28 марта 2019

В основном вы, когда вы нажимаете на любую ссылку, он отправляет запрос на получение.Чтобы передать параметр в запросе get, вам нужно использовать параметр запроса .

Существует много способов передачи параметров, но я покажу вам простой путь

Простое решение состоит в том, чтобызамените код на использование формы и отправьте

<%= 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 %>

Если вы не хотите использовать форму, я могу обновить ответ, предоставив другое решение.

...