【Rails】present?とpresenceの違いと使いどころ

Ruby

present?について

present?は真偽値を返すRailsのメソッドです。
nil, false, ""(空文字), " "(空白), [](空配列), {}(空ハッシュ)の場合にfalse、それ以外の場合にtrueを返します。
真偽値の判定結果は!blank?と等価です。

> nil.present?
=> false

> false.present?
=> false

> "".present?
=> false

> "".present?
=> false

> " ".present?
=> false

> [].present?
=> false

> {}.present?
=> false

presenceについて

presenceはRailsのメソッドです。
オブジェクトが存在する場合はオブジェクト自身、存在しない場合はnilを返します。

object.presenceobject.present? ? object : nilと、email.presence || 'test@example.com'email.present? ? email : 'test@example.com'と等価です。

present?とpresenceの違いについて

表にまとめると以下のようになります。

メソッド オブジェクトが存在する場合 オブジェクトが存在しない場合
present? true false
presence self nil

present?の使いどころ

present?は真偽値を返すメソッドなのでif文の条件式などで利用します。

def message(name)
  if name.present?
    "こんにちは#{name}さん"
  else
    "はじめまして名無しさん"
  end
end

presenceの使いどころ

presenceは『オブジェクトが存在していればオブジェクト自身、存在していなければnilもしくはデフォルト値を返す』といった場合で利用します。

以下の2つのコードの出力結果は同じですが、present?の代わりにpresenceを利用したほうがシンプルにかけます。

present?を使った場合

class User < ApplicationRecord
  def account_name
    if nickname.present?
      nickname
    elsif name.present?
      name
    else
      id
    end
  end
end

presenceを使った場合

class User < ApplicationRecord
  def account_name
    nickname.presence || name.presence || id
  end
end

さいごに

Twitter(@nishina555)やってます。フォローしてもらえるとうれしいです!

参考