[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 ở 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

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *