hello-world.jp.net
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

[s3][ruby]静的ウェブサイトホスティングしたサイトのTwitter Cardsが表示されない場合の対応

先日、S3の静的ウェブサイトホスティングを使ってサイト公開を行った際に、ページ表示やFacebookのOGP表示は問題なくできるのにTwitter Cardsだけ表示されない、という現象が発生しました。

[rails]bodyにclassを付けて特定のページでのみjsが動作するようにする

Asset Pipelineを使用するとjsやcssを結合してくれます。

[ruby][rails]pryでデバッグする

今更ながらpryを使ったデバッグの便利さに感動したのでメモ

[ruby][rails]sidekiqのnamespaceにハマった

sidekiq3.0.1で確認。