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