空文字への代入

空文字への代入

下記のようなコードがある場合、空文字('')へ代入する際の注意点

[app/models ファイル]

  def build_body(controller)
    result = ''

    article_blocks.each do |article_block|
      result << if article_block.sentence?
                  sentence = article_block.blockable
                  sentence.body   #   ①
                elsif article_block.medium?
                  medium = ActiveDecorator::Decorator.instance.decorate(article_block.blockable)
                  controller.render_to_string("shared/_media_#{medium.media_type}", locals: { medium: medium }, layout: false)
                elsif article_block.embed?
                  embed = ActiveDecorator::Decorator.instance.decorate(article_block.blockable)
                  controller.render_to_string("shared/_embed_#{embed.embed_type}", locals: { embed: embed }, layout: false)
                end
    end

    result
  end

上記の①の結果が[nil]になる場合、resultが空文字('')になっているのでresultに代入されない(イメージ図は、以下の通り)

Image from Gyazo

①の部分を以下のように記述することで、[nil]の場合や[false]の場合に空文字をresultに代入するようにできる

sentence.body ||= ''

※ポイント
[nil]に対して[to_s]メソッドを使うと空文字が返ってくる

Image from Gyazo

参考記事:

Ruby の || を使った自己代入演算子 - Qiita