LoginSignup
80
87

More than 5 years have passed since last update.

nil? empty? blank? present? exists? メソッドを状況に応じて使い分けよう[Rails]

Last updated at Posted at 2018-12-15

はじめに

railsアプリを開発している際、nil?empty?blank?present?exists?の使い分けに迷う時がありましたので、ここに、頭の整理のために備忘録としてまとめておきます。

nil? empty? blank? present? の使い分け
こちらの記事にそれぞれの使い分けが載っておりますので、本投稿では開発においての使用場面にフォーカスしてまとめていきます。

使用状況別に考察する

データベースからデータを取得する際(前)

データが存在するかどうかを知りたい時

exists?を使います。truefalseを返します。
いくつか例を載せておきます。

pry(main)> Answer.exists?(1)
=> true(or false)

pry(main)> Answer.exists?(user_id: nil)
=> true(or false)

pry(main)> Answer.exists?(['text = ?', "hello world"])
=> true(or false)

データベースからデータを取得した後

取得したデータのカラムに値が存在するか知りたい時(nil?)

nil?を使います。truefalseを返します。

pry(main)> @answer = Answer.find(1)
pry(main)> @answer.user_id.nil?
=> true(false)

条件に該当したデータの存在を調べるとき[配列]

empty?blank?present?を使います。
取得したデータは配列[... , ... ]です。

まずは、blank?present?の挙動を確認します。

pry(main)> @answers = Answer.where('user_id < 10')
pry(main)> @answers.present?
=> (仮に)true(とした時、blank?は、)
pry(main)> @answers.blank?
=> false(となる)

次にempty?の挙動を確認します。

pry(main)> @answers.empty?
=> false

取得したデータの値の存在を調べるとき[文字列]

pry(main)> @answer = Answer.find(1)
pry(main)> @answer.text
=> "hello hello hello"
pry(main)> @answer.text.present?
=> true
pry(main)> @answer.text.blank?
=> false
pry(main)> @answer.text.empty?
=> false

まとめ

railsではblank?メソッドが使えるため、empty?を使う場面は少ないように感じます。
ですので、私は、上記にあげた用途で、nil?blank?present?exists?の4つを使ってます。

empty?は使用しておりません。もしempty?メソッド使った方がいい場面などありましたらコメント欄などにて教えていただけますと嬉しいです。

また、
nil? empty? blank? present? の使い分けから引用ですが、

nil?とempty?はrubyのメソッドで、blank?とpresent?はrailsで拡張されたメソッド(つまりrubyでは使えない)ってことを覚えておく。

少しでも役に立ったら、いいね、お願いします(^^)

Rails関連記事

正規表現まとめ(基礎)[Ruby編]
配列で利用できる主なメソッドをまとめてみた[Ruby編]
Mysql2::Error: Duplicate entry for key.. エラーを撃退した話(validationの設定)
Rails5でJqueryを利用しようとして少しハマった件(Uncaught ReferenceError: $ is not defined)
change_columnでの設定はrollbackできない話(This migration uses change_column, which is not automatically reversible.)[Rails: migration]
sessionに保存されたHashを別アクションで利用しようとした際にデータ型の変更によりハマった件[Rails]
Railsでfacebookログイン認証機能を実装してみた + エラーの原因はバリデーションだった
csvファイルを作成し、初期データを挿入しよう[Rails]
ArgumentError in ********Controller#send [Rails]
Render and/or redirect were called multiple times in this action...の罠[Rails]
クエリメソッドをまとめてみた[Rails]

80
87
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
80
87