【Rails】左辺値が空文字や空配列の場合の短絡評価

自作サービスで学んだことメモ

postオブジェクトのimage属性を追加したい。
ogpの画像URLがあればそれを。なければdefault_imageにしようというもの。

post.image =  page.meta['og:image'] || 'default_image'

としていたが、||は左辺値がnilかfalse以外は真。
このサイトのogpの画像URLは空文字''だったので、post.imageには''が代入されしまっていた。

Rails における nil?, empty?, blank?, present? の使い分けとBetter Practice - Qiita
より、Railsでは空文字判定にblank?が便利。
(empty?だと、レシーバ(page)がnilになるとエラーが返る)

さっそくblank?を使ってみたけど短絡評価は使えず、三項演算子だと長くなる。

post.image = if page.meta['og:image'].blank?
               'default_image'
             else
               page.meta['og:image']
             end

rubocopをかけたら

post.image = page.meta['og:image'].presence || 'default_image'

presenceメソッドは存在すればそれ自身を、なければnilを返す
ありがとうrubocop