2 flat logo on transparent 256
2018-03-11

Ruby On Rails でデータを取得するメソッド一覧

Dbicon21

プログラミングを勉強していると、データベースから値を取得する作業が必ず発生します。

Ruby On Railsでは、SQL文を書かずともメソッドで値を取得する事が可能になります。

今回はRuby On Railsでデータを取得する際のメソッドを紹介します。

Railsバージョン:Ruby on Rails4

Model名: Article

.allでモデルから全件取得

モデル名.allで指定モデルから全件データを取得できます。 indexアクションなどで設定されていることが多いです。

class ArticlesController < ApplicationController

  def index
    @articles = Article.all 
  end

end

.whereでモデルから該当する値を全て抽出

モデル名.whereで該当する値を全て抽出します

下記例ではstatusカラムへcloseという値が入っている記事を全て抽出する といった例になります。

@articles_close = Article.where(status: "close")

モデル名.where.notを利用して該当する値「以外」を抽出する

.where.notを利用して指定値以外を抽出する事も可能です。 下記ではstatusカラムがclose「以外」の値を全て抽出する例になります。

@articles = Article.where.not(status: "close")

.whereを複数繋いで(メソッドチェーン)値を絞り込む

.whereを複数利用して値を絞り込んで抽出(and検索)する事も可能です。

@articles = Article.where(status: "open").where(title: ‘プログラミング’)

.whereでor検索

or検索は若干生SQLを記載する感じになります。 ただ、Ruby On Rails5ではorメソッドが追加されているので、より書きやすくなっています。

@articles = Article.where("status = ? OR name = ?",'open', '佐藤')

ちなみにArelで検索する方法もありますが、Railsの公式がサポートしていないので 個人的にお勧めはしません。

.find .find_byで1件だけ、データを取得する

.findやfind_byはshowアクションなど特定のIDの情報を表示したい時に 利用します。

class ArticlesController < ApplicationController

  def show
    @article = Article.find(params[:id])  
  end
end

find とfind_byの違い

●find● 引数:idのみ

Article.find(1)

返却値:複数値を返せる

Article.find(1, 2, 3) 

※findで条件に該当する複数の値を表示したいのであればwhereを利用すべきです。

指定の結果が存在しない場合:例外を発生させて処理を中断する

■find_by■ 引数:カラム指定可能

Article.find_by(title: "Ruby On Rails")

複数値:複数値を返せない

Article.find_by(title: "Ruby On Rails")

上位で検索で複数のレコードが条件に該当する場合は 1番始めに該当したレコードを返す

指定の結果が存在しない場合:nilが返ってくる

その他RubyOnRailsではデータ検索を効率化するscopeメソッドがあります。詳細は下記からご参照ください

Ruby On Railsのscopeメソッドで検索を効率化する

その他関連記事

【初心者・独学者向け】Ruby On RailsでテーブルやModelを削除する際のコマンド

Ruby On Rails4で簡易ブログを作成する1 | VIew Controller ルートを作成する

【初心者・独学者向け】Ruby On Railsで中間テーブルを作成し、多対多を実現する

前の記事
次の記事