Help us understand the problem. What is going on with this article?

Railsでデータを取得するメソッドまとめ

More than 1 year has passed since last update.

はじめに

これが私の初めての投稿になります。プログラミングを始めて1ヶ月ちょっとになりますが、今はRailsを中心に勉強していて、自分的に理解が曖昧になっているところがちらほらと出てくるようになりました。なので私の備忘録として記事を書いていきたいと思います。あとはアウトプットの練習ですね。今回はいくつか簡単なアプリを作成した際に、いつもデータベースから値を取り出す際にエラーを出していたのでよくわかっていなかったそこらへんについて軽く。


☆複数のデータを取得☆

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

まずはシンプルに全ての値をモデルから取り出すやり方。

class BlogsController < ApplicationController

  def index
    @blogs = Blog.all
  end
end

.whereで条件にあてはまる値をモデルから全て取り出す

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

class BlogsController < ApplicationController

  def show
    @blogs_goodmorning = Blog.where(title: "おはよう")
  end
end

複数の値をviewで表示する

値が複数である場合はeachメソッドなどでどれを使うか指定してあげます。

<% @blogs.each do |blog| %>
  <ul>
     <li>タイトル:<%= blog.title %></li>
     <li>内容:<%= blog.content %></li>
  </ul>
<% end %>

☆一つのデータを取得☆

.findで特定のidの値を一つ取り出す

findメソッドで取得できる値はidのみで、以下のようなRailsのshowアクションなどでidのデータを取得するときによく使われます。

class BlogsController < ApplicationController

  def show
    @blog = Blog.find(params[:id])  
  end
end

.find_byで特定の一つの値をを取り出す

引数に指定した条件に最初に一致するレコードを取得するメソッド。
idがわかっていて、id以外(idも取得可能)のカラムデータから1つのデータを取得したい時によく使われます。
以下のようなユーザーからemailを取得したい時などに使われる。

class UsersController < ApplicationController

  def edit
    @user = User.find_by(email: params[:email])
  end 
end

idを取得した時のfindとfind_byの違い

findメソッドは、もしデータが無かった場合、エラーになります。find_byはデータが無い場合nilを返します。
Userのidが1しか存在しない前提では以下のような結果になる。

# これは完全に同じ
@user = User.find(1)
@user = User.find_by(id: 1)

# 以下が違う!
@user = User.find(2)
#=> ActiveRecord::RecordNotFound: Couldn't find User with 'id'=2

@user = User.find_by(id: 2)
#=> nil

おわりに

この他にもrailsではActiveRecordのメソッドがありますが、まずは基本的でよく使われるものを記事にしてみました。間違っていたら指摘をお願いいたします。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away