前提・実現したいこと
CSVファイルを読み込み、DB登録するのですがvalidationでは複雑になるので
model側で、登録可否を判断しています。
そのmodelの判断で不整合と判断した情報を、viewで表示したい。
modelで、不整合と判断した情報を、オブジェクトに追加するコーディングが分かりません。
どのようにmodel → controller → view 表示できるでしょうか?
該当のソースコード
controller
def import if params[:file].blank? flash[:danger] = 'Import failure. CSV file is not selected' redirect_to statuses_path else add_cnt, update_cnt, error_cnt, @statuses = List.tss_import(params[:file]) if error_cnt > 0 then flash.now[:alert] = "Import result to tool_list<br/> ---> Import_error = #{error_cnt.to_s}".html_safe render template: "statuses/import_result", collection: @statuses else flash.now[:notice] = "Import result to tool_list<br/> ---> Added = #{add_cnt.to_s}<br/> ---> Updated = #{update_cnt.to_s}".html_safe redirect_to lists_path end end end
model(controllerとは別のmodel)
def self.tss_import(file) add_cnt = 0 update_cnt = 0 error_cnt = 0 line = 1 error_reason = "" @statuses = [] @lists = [] CSV.foreach(file.path, headers: true, encoding: 'Shift_JIS:UTF-8') do |row| if row[…] ※判断文(省略) @statuses << { "error_reason" => "E002", "line" => line, "row" => row } error_cnt += 1 next end line += 1 end end if error_cnt > 0 return add_cnt, update_cnt, error_cnt, @statuses end
view
h1 Status import result table thead tr th line th error_reason th number th generation tbody - @statuses.each do |status| tr td =status["line"] td =status["error_reason"] td =status["number"] td =status["generation"] end
回答4件
あなたの回答
tips
プレビュー