【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