hello-world
webエンジニアのメモ。とりあえずやってみる。

[rails]find_byでもActiveRecord::RecordNotFoundをraiseしたい

公開日時

ActiveRecordでfindメソッドに存在しないidを渡すとActiveRecord::RecordNotFound exceptionがraiseされます。

id = 9999     # 存在しないID
Hoge.find(id) # => ActiveRecord::RecordNotFound

rails4から使えるようになったメソッドで、条件指定で1件レコードを取得できるfind_byがありますが、こちらは該当データが存在しなかった場合は例外ではなくnilが返って来ます。

id = 9999            # 存在しないID
Hoge.find_by(id: id) # => nil

「find_byでもActiveRecord::RecordNotFound exceptionをraiseしたいな」と思いながらきちんと調べてなかったのですが、こういう場合はfind_by!メソッドを使えばよかったのですね。

id = 9999             # 存在しないID
Hoge.find_by!(id: id) # => ActiveRecord::RecordNotFound

わざわざ

hoge = Hoge.find_by(id: id)
raise ActiveRecord::RecordNotFound unless hoge

と書かなくてもいいのでスッキリしますね。

参考


Related #Rails

[rails]国際化対応でlocaleを省略したURLのrouting設定

タイトルだけだとよくわからないですね サンプルサイトとして、

[rails]Active Adminのformでjp_prefectureを使う

都道府県データを扱う際に、都道府県マスターデータをどうしようかなと思っていたところ、 chocoby/jp\_prefectureというgemを発見し、こちらを使わせていただきました。

[Rails]日付と時間の入力フォームにDateTimePickerを使う(bootstrap3-datetimepicker-rails)

Ruby2.1.0, Rails4.1で確認 フォームで日時を入力する際に、カレンダーを表示して入力サポートをするDateTimePickerを導入したかったので調べてみました。

[rails]carrierwaveで特定のuploaderだけ別のs3バケットを使いたい場合

carrierwaveの保存先にs3を使用する場合、config/initializers/carrierwave.rb にs3の設定を書くと思いますが、 特定のuploaderだけ普段とは別のs3バケットを使いたい場合どうやるのかを調べてみました。