先週はコロナで休講しまして、本日、一週間ぶりの演習でした。
学生から「先週の課題、講義資料通りにやったんですが、全然できなかったんですよ〜。調べたらRails7では記述方法が変わっていてそのとおりにやったらエラーが出てきましたよ〜」と教えてくれました。
rails testの方は試していましたが、エラー処理の方は調べていませんでした。詰めが甘い。。。すんません。
ネットに対処方法が溢れていますが、一応、以下、メモしておきます。
以下がRails5から使っているコードです。ストロングパラメタは使わせてないのでダラダラしていますが。。。意味もわからず書かせたくなかったのでWebアプリで頻出するparamsで記述してもらっています。
def create @bookmark = Bookmark.new(title: params[:bookmark][:title], url: params[:bookmark][:url]) if @bookmark.save redirect_to '/' else render 'new' end end
問題はrender 'new'のあとのオプションの有無でした。これがないとこのあとnew.html.erbでエラーメッセージが捕捉できません。せっかくvalidatesしているのにエラーメッセージが表示できない罠に陥ります。あちらを立てればこちらが立たずですなぁ。。。我々初学者は別にRails7でなくてもRails5でも十分だな。。。と改めて思うわけですが。しかたがないです。
def create @bookmark = Bookmark.new(title: params[:bookmark][:title], url: params[:bookmark][:url]) if @bookmark.save redirect_to '/' else render 'new', status: :unprocessable_entity end end
この現象に関して、対処方法のみ書かれているエントリーが多数ありましたが、以下はその理由も書いてくれています。ありがたいです。