【Rails入門】any?メソッドの便利な使い方を紹介

こんにちは!システムエンジニアのオオイシです。

Ruby on Railsのany?メソッドをご存知ですか!?

any?メソッドはどのような時に使うの?

present?メソッドじゃダメなの?

validationエラーの存在を確認する方法を知りたい。。。

というそんなあなたに、今回は、


【基礎】any?メソッドとは
【基礎】any?メソッドの使いかた
【応用】any?とpresent?との違い
【応用】validationエラーでの応用

などについて解説いたします。

Railsのany?メソッドはモデルのデータを評価するための便利なメソッドですので、使い方をよく理解しておきましょう。

any?メソッドとは

any?メソッドとは、

  • モデルにデータが存在する → true
  • モデルにデータが存在しない → false

を返すメソッドです。

ブロックを使う場合は、ブロック内の条件が1つでもtrueになればany?メソッドがtrueを返します。

書き方:

このようにとても簡単に使えるメソッドです。

次項ではany?メソッドの使いかたを見ていきましょう。

any?メソッドの使いかた

ここではany?メソッドの使いかたを紹介していきます。

any?メソッドの基本

はじめにname属性をもつSampleモデルを作成します。

サンプルモデル作成:

データが0件の場合はfalse、1件の場合はtrueを返却するサンプルプログラムを確認してみましょう。

Railsコンソールを使います。

サンプルコード:

このようにデータが存在する時はtrueを返却することが確認できした。

where条件とany?メソッドの組み合わせ

実用的な使いかたとして、where検索データにany?メソッドを使う方法について紹介します。

検索結果の件数が1件以上の場合にany?メソッドはtrueを返します。

サンプルコードで確認してみましょう。

サンプルコード:

このように、whereメソッドと組み合わせることができました。

なお、Railsコンソールについてはこちらで詳しく解説しているので、ぜひ参考にしてみてください。

ブロックに条件を指定

ブロック付きのany?メソッドは、ブロックに記述した条件が1つでもtrueになったらany?メソッドもtrueを返します。

サンプルコードを確認してみましょう。

このように、ブロックを使った条件指定でany?メソッドを使うことができました。

any?とpresent?との違い

present?メソッドany?メソッドとの違いについて紹介します。

結論からいうとany?メソッドの方が高速です。

  • present? → 全てのデータを取得する
  • any? → 1件のみデータを取得する

Railsが実行するSQLを比較して違いを確認してみましょう。

このように、SQLの最後にLIMIT 1 が付与されています。

このため、データ量に関係なく1件を取得するから高速なのです!

なお、Rubyのpresent?についてはこちらに詳しく紹介されています。

【Rails入門】presentメソッドの使い方まとめ
更新日 : 2017年7月17日

validationエラーでの応用

validationエラーありなしの判定にもany?メソッドが利用できます。

例えば次のようなERBプログラムです。

サンプルコード:

そんなany?メソッドは、

  • rubyの配列(Arrayクラス)
  • validationエラーの配列(ActiveModel::Errorsクラス)
  • モデル(Active Recordクラス)

全て同じany?メソッドを使っています。

なぜならば、これらのクラスはEnumerableモジュールをインクルードしているためです。

そのため、全て同じ動きになります。

all?メソッドは、ブロック引数itemに要素を入れながらブロックを繰り返し実行し、ブロックが真が返したときは繰り返しを中断してtrueを返します。ブロックの戻り値がすべて偽であるとき、あるいはレシーバが空であるときにはfalseを返します。

出典:any? (Enumerable) – Rubyリファレンス

なお、includeについてはこちらで詳しく解説しています。

まとめ

いかかでしたか?

今回は、Railsのany?メソッドの使い方をについて解説しました。

any?メソッドとは、

  • モデルにデータが存在する場合 → true
  • モデルにデータが存在する場合 → false

を返すメソッドです。

any?メソッドはモデルのデータを評価するための便利なメソッドなのでぜひ活用してみてください。

そして、any?メソッドの使い方を忘れてしまったらこの記事を確認してくださいね!

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

オオイシ

オオイシ

システムエンジニア歴15年のオオイシです!好物は Java と Ruby。プログラミング、システムアーキテクトからマネジメントに到るまでなんでも食べます。
システム開発の相談やお困りごとがあればお気軽に
[email protected] まで連絡頂けると幸いです

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説