Я хотел бы иметь возможность загружать данные моего индекса из таблицы заказов в формате csv.Мне удалось реализовать эту функцию с помощью следующего кода:
orders controller:
class OrdersController < ApplicationController
before_action :find_order, only: [:edit, :destroy, :update, :show]
def index
@orders = Order.all.order("created_at DESC").paginate(:page => params[:page], :per_page => 20)
# to allow csv and xls formats to be downloaded
respond_to do |format|
format.html
format.csv { send_data @orders.to_csv }
format.xls { send_data @orders.to_csv(col_sep: "\t") } # tab separate to work with Excel
end
end
Модель заказа:
def self.to_csv(options = {})
CSV.generate(options) do |csv|
csv << column_names
all.each do |order|
csv << order.attributes.values_at(*column_names)
end
end
end
Однако, это позволяет мне загружать только первые 20 записей в таблице заказов.из-за нумерации страниц у меня.Я думал, что следующий код исправит это, но это ничего не изменит:
def index
@orders = Order.all
# to allow csv and xls formats to be downloaded
respond_to do |format|
format.html { @orders.order("created_at DESC").paginate(:page => params[:page], :per_page => 20) }
format.csv { send_data @orders.to_csv }
format.xls { send_data @orders.to_csv(col_sep: "\t") } # tab separate to work with Excel
end
end
app/views/orders/index.html.erb:43:in `_app_views_orders_index_html_erb___1955221700531553779_70231785858000'
Started GET "/" for 127.0.0.1 at 2018-11-28 01:19:56 +0100
Processing by OrdersController#index as HTML
Rendering orders/index.html.erb within layouts/application
User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ? [["id", 3], ["LIMIT", 1]]
Order Load (0.9ms) SELECT "orders".* FROM "orders" ORDER BY created_at DESC LIMIT ? OFFSET ? [["LIMIT", 10], ["OFFSET", 0]]
(0.3ms) SELECT COUNT(*) FROM "orders"
Rendered orders/index.html.erb within layouts/application (44.6ms)
Completed 200 OK in 216ms (Views: 203.2ms | ActiveRecord: 6.4ms)
Started GET "/orders.csv" for 127.0.0.1 at 2018-11-28 01:20:03 +0100
Processing by OrdersController#index as CSV
Order Load (0.6ms) SELECT "orders".* FROM "orders" ORDER BY created_at DESC LIMIT ? OFFSET ? [["LIMIT", 10], ["OFFSET", 0]]
Rendering text template
Rendered text template (0.0ms)
Sent data (4.7ms)
Completed 200 OK in 15ms (Views: 4.5ms | ActiveRecord: 0.6ms)
Есть идеи, как сохранить нумерацию страниц, но иметь возможность загружать все записи в таблице Order?