[Rails] Tip xử lý khi import file

Note khi làm tính năng import file lên hệ thống để lưu data: Kiểm tra file phải đúng định dạng ở controller. VD: đuôi phải là csv, excel nếu không sẽ báo lỗi if params[:file].original_filename.split(".").last == Settings.export.format.csv status, message = ImportService.import_csv(params[:file]) else status, message = [false, "File khong phai csv"] end Tiếp đến Bắt lỗi

Note khi làm tính năng import file lên hệ thống để lưu data:

Kiểm tra file phải đúng định dạng ở controller. VD: đuôi phải là csv, excel nếu không sẽ báo lỗi

if params[:file].original_filename.split(".").last == Settings.export.format.csv
      status, message = ImportService.import_csv(params[:file])
    else
      status, message = [false, "File khong phai csv"]
end

Tiếp đến Bắt lỗi ở file import:

  • Kiểm tra có đọc được file theo định dạng mong muốn k? nếu k đúng định dạng thì báo lỗi luôn. VD: file encoding là gì?, có header …
      begin
        csv = CSV.read(file.path, headers: true, encoding: jis_encoding)
      rescue StandardError
        return [false, @i18n_message[:invalid_encode]]
      end
  • Nếu file có header : tên các cột thì cần kiểm tra có đủ cột hay k? tên cột có đúng k?
return [false, @i18n_message[:invalid_file]] if csv.headers != i18n_export[:label_name].values
  • Sau đến mới xử lý chạy từng row và lấy data, Kiểm tra validate. nếu validate lỗi thì gom nó vào 1 mảng lưu các dòng lỗi, nội dung lỗi.
    Hiển thị lỗi theo dòng:
"<li>Dong #{$INPUT_LINE_NUMBER}: #{errors.join('')}"

thay vì foreach từng row rồi tạo lưu luôn vào DB thì sẽ foreach từng row, khởi tạo object cho vào 1 mảng

Sau đó dùng gem “activerecord-import” để import 1 lần vào CSDL

Nguồn: viblo.asia

Bài viết liên quan

Thay đổi Package Name của Android Studio dể dàng với plugin APR

Nếu bạn đang gặp khó khăn hoặc bế tắc trong việc thay đổi package name trong And

Lỗi không Update Meta_Value Khi thay thế hình ảnh cũ bằng hình ảnh mới trong WordPress

Mã dưới đây hoạt động tốt có 1 lỗi không update được postmeta ” meta_key=

Bài 1 – React Native DevOps các khái niệm và các cài đặt căn bản

Hướng dẫn setup jenkins agent để bắt đầu build mobile bằng jenkins cho devloper an t

Chuyển đổi từ monolith sang microservices qua ví dụ

1. Why microservices? Microservices là kiến trúc hệ thống phần mềm hướng dịch vụ,