(自分用メモ)詳細 スクール課題1 タスクアプリ作成 新規登録にてバリデーション実施時のフラッシュメッセが表示されず、エラーが出る
<結論>
rails7特有の問題
アクションにstatus: :unprocessable_entityを追記することで解決
<以下本文>
■現状
課題1スケジュールアプリにおいて、新規登録にて記入欄が空欄際に表されるフラッシュを実装しようとしています。
実装のため
上記参考の上、以下実施しましたが、エラーが発生し、解決できずにいます。
・バリデーション記入
・_error.html.erb作成
・renderをnew.html.erbに記載
その後、新規登録の画面から、記入欄全て空欄にしたのち、サイト下部”新規登録”を押すとエラー画面へ
■実際に出てるエラーメッセージ
■やりたいこと
エラーを解決し、以下モデルサイトの様にフラッシュが正常に出る様にしたい
■環境
M1チップ
ventura ver13.0
rails704
ruby304
■既に試したこと、参考にしたページ
→status: :unprocessable_entityをコントローラーに追記。※追記も同じエラー
■git
<回答>
ユーザー画像
中野(メンター
2022/11/3 22:35
<td><%= f.date_field :start %></td>
13行目の start
は文字列のデータのため、日付に変換できない。というようなエラーになります。
schema.rbを見ると start
は文字列型で定義しているのが恐らく問題ですので変更方法は調べてみましょう。
ユーザー画像
長井宏樹
2022/11/4 11:21
中野様
回答ありがとうございます
こちらのページを参考に、モデルのカラムデータ型を変更しました。
しかしながら、同じように
新規登録の画面から、記入欄全て空欄にしたのち、サイト下部”新規登録”を押すとエラー画面へ
新たに以下のようなエラーが出ました。
自身の仮説として、
以下 t.datetime "created_at", null: falseのように null: falseを追記しないといけないと
考え追記しましたが、同じエラーが出ました。
そもそも、仮説が合っているのか。
また、仮説が合っていたとしても、追記の仕方が間違っているのか。
ご指導いただけますと幸いです。
ユーザー画像
メンターHyo
2022/11/4 11:44
まずはエラーを理解していただきたいかなと思います。Google翻訳などで正確に翻訳し理解していただき、その翻訳文を載せてください。
また翻訳文から現状なにが問題でどこを疑っていけばいいのかもアウトプットお願いします
ユーザー画像
長井宏樹
2022/11/4 14:30
hyo様
ご連絡有り難うございます。
翻訳文から考えると、
post.rbにself.finishとself.startの定義がなかったからと考えます。
もう少しシンプルな書き方で定義しました(以下)。
if start.present? && finish.present? && start >= finish
該当していたエラー文は出てこなくなりましたが、
以下のように開始日、終了日の日付を入れ替えて、フラッシュを出さそうとしました。
しかし。今度はsubmitの登録完了するが反応しなくなりました。
これら記事を参考に<% end %>の位置を変えてみたり、</table>の位置を変えてみたものの、反応せず。
そもそも論として、自分の進め方が合っているのかも含めて、ご指導いただければと思います
ユーザー画像
長井宏樹
2022/11/4 14:55
こちらの記事参考に試してみましたら、解決できました。
バリデーション機能し、フラッシュ文出てきました
メンター様方
ご回答いただき有り難うございました。
Discussion