memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

メモ:rails7のvalidates失敗後のrenderに負荷するオプション

先週はコロナで休講しまして、本日、一週間ぶりの演習でした。

学生から「先週の課題、講義資料通りにやったんですが、全然できなかったんですよ〜。調べたら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

この現象に関して、対処方法のみ書かれているエントリーが多数ありましたが、以下はその理由も書いてくれています。ありがたいです。

【Rails7】renderメソッド注意点【エラーハンドリング】 #Ruby - Qiita