Một cách khác để làm điều này mà không sử dụng FasterCSV:
Yêu cầu csv của ruby thư viện trong một tập tin khởi tạo như config/initializers/dependencies.rb
require "csv"
như một số nền tảng mã sau đây là dựa trên số Ryan Bate's Advanced Search Form tạo tài nguyên tìm kiếm. Trong trường hợp của tôi, phương thức hiển thị của tài nguyên tìm kiếm sẽ trả về kết quả của tìm kiếm đã lưu trước đó. Nó cũng đáp ứng với csv và sử dụng mẫu xem để định dạng đầu ra mong muốn.
def show
@advertiser_search = AdvertiserSearch.find(params[:id])
@advertisers = @advertiser_search.search(params[:page])
respond_to do |format|
format.html # show.html.erb
format.csv # show.csv.erb
end
end
tập tin Các show.csv.erb trông giống như sau:
<%- headers = ["Id", "Name", "Account Number", "Publisher", "Product Name", "Status"] -%>
<%= CSV.generate_line headers %>
<%- @advertiser_search.advertisers.each do |advertiser| -%>
<%- advertiser.subscriptions.each do |subscription| -%>
<%- row = [ advertiser.id,
advertiser.name,
advertiser.external_id,
advertiser.publisher.name,
publisher_product_name(subscription),
subscription.state ] -%>
<%= CSV.generate_line row %>
<%- end -%>
<%- end -%>
Trên phiên bản html của trang báo cáo tôi có một liên kết để xuất báo cáo rằng người dùng đang xem. Sau đây là liên kết_để trả về phiên bản csv của báo cáo:
<%= link_to "Export Report", formatted_advertiser_search_path(@advertiser_search, :csv) %>
Ít nhất trong các phiên bản gần đây của Rails, bạn cũng có thể sử dụng 'Entry. tất cả' thay thế. –