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.presenceはobject.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)やってます。フォローしてもらえるとうれしいです!



