質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

1回答

566閲覧

エラーの表示方法について

kyokoiev

総合スコア0

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2020/09/05 09:07

modelで作成したvalidationがうまくいきません

csvから取り出したデータに対し、validateをかけたいと思っています。
一旦全てのcsv_userに、csv_validでvalidationをかけて、その後にエラーメッセージでvalidateされたレコードを表示させたいです。

どのような方法がありますでしょうか?
csvの何行目が誤っています。のような表示はできるものなのでしょうか??

該当のソースコード

controller

1 def csv_import 2 @csv_users = User.import_list_from_csv(params[:file]) 3 @csv_users.each do |csv_user| 4 if csv_user.csv_valid 5 csv_user.kind_number = NKF.nkf('-w -Z1 -Z4 -x', csv_user.kind_number) 6 else 7####################ここに書くと思うのですが。。 8 end 9 end 10 redirect_to users_url 11 end

model

1 def csv_valid 2 result = true 3 if self.name.blank? 4 result = false 5 end 6 if self.age.blank? 7 result = false 8 end 9 if self.kind_number.blank? 10 result = false 11 else 12 if self.note.length > 10 13 result = false 14 end 15 end 16 return result 17 end 18 19 class << self 20 def import_list_from_csv(file) 21 csv_users = [] 22 CSV.foreach(file.path, encoding: 'Shift_JIS:UTF-8', headers: true, converters: :integer) do |row| 23 values = row.to_h 24 csv_users << User.new( 25 id: values["id"], 26 name: values["name"], 27 age: values["age"], 28 brithday: values["brithday"], 29 note: values["note"] 30 kind_number: values["kind_number"] 31 ) 32 end 33 csv_users 34 end 35 end

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/09/05 09:52

>csvの何行目が誤っています。のような表示はできるものなのでしょうか?? 「そう作ればできる」という回答になりますがよろしいでしょうか。 内容ループしてるなら幾らでもやりようがあるでしょうし…。フォームのバリデーションと考え方は同じでしょうし。
guest

回答1

0

一旦全部CSVを読んでから だと 行番号と@csv_users 内の順番が本当に一致しているか不安なのですが、、、 
User.import_list_from_csv でどうloopしているか、ですが
CSV.foreach だと CSV.foreach(...).with_index(1){|row,line| で行が取れます。
そのloopのなかで user.valid? して
erros << [line,user.errors.full_massages] if user.errors.present?
とでもして、return [users,errors] で返し
@csv_users,errors = User.import_list_from_csv() で受ける

投稿2020/09/05 11:41

編集2020/09/06 01:53
winterboum

総合スコア23567

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問