Export CSV, Excel
Bài đăng này đã không được cập nhật trong 8 năm
Đôi khi người sử dụng muốn xử lý dữ liệu theo cách mà họ muốn. Trong tình huống như vậy thì chúng ta nên xuất dữ liệu trong một định dạng bảng để người dùng có thể dùng các trình soạn thảo để làm bất kỳ điều gì họ muốn.
Bài viết này giới thiệu đến mọi người cách đơn giản nhất để export dữ liệu ra file CSV/Excel.
Để đơn giản thì mình giả sử mình đang muốn xuất dữ liệu của bảng Product ( gồm 2 cột là ID và Name)
I. Export CSV
- Đầu tiền ta sử dụng thư viện CSV để tạo ra dữ liệu CSV, bằng cách như sau.
Thêm vào file config/application.rb
như sau
require File.expand_path('../boot', __FILE__)
require 'csv'
- Tiếp theo file
products_controller.rb
ta thêm một khốirespond_to
như đoạn sau.
def index
@products = Product.all
respond_to do |format|
format.html
format.csv {render text: @products.to_csv}
end
end
- Trong
models/product.rb
method to_csv được mô tả:
def self.to_csv
CSV.generate do |csv|
csv << column_names
all.each do |product|
csv << product.attributes.values_at(*column_names)
end
end
end
Dòng đầu tiên của file sẽ là tên các trường của bảng Product. Các dòng tiếp theo là giá trị các trường tương ứng với dòng đầu của mỗi product trong database.
- Trong View thêm dòng này để khi click vào sẽ xuất ra file products.csv
<%= link_to "CSV", products_path(format: "csv") %>
II. Export Excel
- Thêm vào file
/config/initializers/mime_types.rb
như sau:
Mime::Type.register "application/xls", :xls
- Thêm format: xls trong products_controller.rb
def index
@products = Product.all
respond_to do |format|
format.html
format.xls { render text: @products.to_csv }
end
end
- Trong
models/product.rb
method to_csv được mô tả tương tự như đối với file csv:
def self.to_csv
CSV.generate do |csv|
csv << column_names
all.each do |product|
csv << product.attributes.values_at(*column_names)
end
end
end
- Và ta tượng trong view chúng ta thêm
<%= link_to "Excel", products_path(format: "xls") %>
Trên đây là cách đơn giản nhất để xuất dữ liệu ra file CSV/Excel mà mình đã được biết đến.
Tài liệu tham khảo
All rights reserved