Edited at

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


はじめに

これが私の初めての投稿になります。プログラミングを始めて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のメソッドがありますが、まずは基本的でよく使われるものを記事にしてみました。間違っていたら指摘をお願いいたします。