CSVインポート処理時のエラーメッセージの行と列を特定し書き込む方法

前提

CSVインポート機能を作成しています。

csvは以下のようなものを挿入する予定です

user.csv

login, name, email test1,user1,test@gmail.com

実現したいこと

CSVのエラーが出た場合にのみ該当箇所の行と列を特定しエラー内容とともに出力したい。

ソースコード

import_controller.rb

ruby

def create @error = [] CSV.foreach('template.csv',headers: true).with_index(1) do |row, line_num| form = APi::UserImportForm.new(id: row['id'],name:['name'],email:['email']) @errors << form.save CSV.open("template.csv", "a") do |csv| row.each_with_index(cell , column_num) @errors <<  "#{column}の{lineno}行目を処理中にエラーが発生しました#{@errors}" end end endend

import_form.rb

ruby

attr_accessor: id,name, email before_save :form_validvalidates :login, format: {with: ID_REGEXP},presence: truevalidates :name, length: {maximum:200},presence: truevalidates :email, format: {with: EMAIL_REGEXP},allow_blank: true def save run_callbacks :save do#別APIへの登録処理 gaibu_user = Gaibu::User.create(login: login,name: name) if gaibu_user.errors.present? errors.add('invalid_parameter', gaibu_user.errors) #User作成処理 user = User.create!(email: email) endend

試したこと

上記の書き方だとエラーが発生した場合存在する全ての行と列ににたいして同じエラーが出力されてしまいます。

コメントを投稿

0 コメント