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

【初心者向け】RailsのActive Recordの解説&メソッドまとめ

More than 1 year has passed since last update.

はじめに

いつも何気なくコントローラに@blog = Blog.newとか@user = User.find(params[:id])とかよく考えずに書いていました。
Railsすごいなあ、楽だなあとか思ってたんですけどこれって厳密にいうとRailsじゃなくてActiveRecordのおかげなんですよね。
そこで今回はいつも何気なく使っているActiveRecordについてできるだけやさしく解説してみました。

ActiveRecordとは

一言で言えば「RubyとSQLの翻訳機」です。

基本的にDBにはDB言語としてSQLが使われています。
SQLでないとDBの操作ができません。

しかし、RailsにはModelにActiveRecordが適用されているおかげで、Rubyを用いてDBからデータを探したり、持ってきたりすることができます。
(厳密にはModelにApplicationRecordを介してActiveRecordが適用されているため)

app/models/application_record.rb
class ApplicationRecord < ActiveRecord::Base #ここでApplicationRecordにActiveRecordを継承
  self.abstract_class = true     
end
app/models/blog.rb
class Blog < ApplicationRecord #BlogモデルにそのApplicationRecordを継承
end

図で表すとこんな感じ

スクリーンショット 2018-10-05 8.30.06.png

ActiveRecordのメリット

○ Rubyで直感的に書ける

例えば、みなさんが何気なくこの名前のユーザーをDBから探したいなあとか思って書くこれや

User.find_by(name: "ryokky")

値をDBに保存したいときに書くこれ

User.create(name: "ryokky")

このようにDBの中をのぞいたり、レコードを作成するときにSQLではなく、みなさんにより馴染みのあるRubyで書けるようになります。

○どのDBを使用してもRubyで統一できる

DBにはMySQL、PostgreSQL、SQLite、SQL Server、Oracleなどいろんな選択肢があります。
また、それぞれのDBごとに書き方が微妙に違います。
その書き方をすべてRubyで記述できるようにしてくれます。

ActiveRecordでよく使うであろうメソッド

冒頭にも書きましたがいつもコントローラに書いているものたちは大体ActiveRecordのメソッドです。
今回はCRUD(「Create:生成」、「Read:参照」、「Update:更新」、「Delete:削除」)に沿って紹介します。
紹介しきれないので主要なものだけ

○Create(生成)に関するメソッド

@blog = Blog.new(title: "タイトル", content: "内容")
#blogモデルのインスタンスを作成

@blog = Blog.build(title: "タイトル", content: "内容")
#newと同じ、可読性を上げるため関連モデルのインスタンスにするときによく使われる

@blog.save
#newやbuildで作った@blogをDBに保存する

Blog.create(title: "タイトル", content: "内容")
#newとsaveを組み合わせて生成と同時にDBへ保存する。

○Read(参照)に関するメソッド

@blog = Blog.all
#blogsテーブルから全レコードを配列として取得

@blog = Blog.first
#blogsテーブルのidが一番小さいレコードを取得

@blog = Blog.last
#blogsテーブルのidが一番大きいレコードを取得

@blog = Blog.find(1)
#引数に入っている数字と同じidのレコードを取得

@blog = Blog.find_by(title: "タイトル")
#引数に入っている条件と合っているもので一番若いidのレコードを取得

@blog = Blog.where(title: "タイトル")
#引数に入っている条件と合っている全てのレコードを取得

@blog = Blog.order(id: :desc)
#引数に入っているカラムを:asc(昇順)または:desc(降順)に並び替えてレコードを取得

@blog = Blog.select(:title)
#引数に入っている名前のカラムのみを取得

@blog = Blog.limit(3)
#引数に入っている数字の数だけidの若い順にレコードを取得

参照系のメソッドは便利なものが多くあります。
また、メソッドチェーンでもっと細かく指定することも可能です。

○Update(更新)に関するメソッド

@blog.update
#findやfind_byで取得したレコードを元に更新

○Delete(削除)に関するメソッド

@blog.destroy
#findやfind_byで取得したレコードを削除

もっとメソッドの種類や使い方を知りたい方はこちらの記事が参考になりましたのでどうぞ
参考:ActiveRecord CRUDサンプル

終わりに

Railsを勉強し始めた方のためにほんとにさわりだけ今回は紹介してみました。
書いていて自分でもぼやっとしてたところが埋められた気がします。
他にもわかりやすい記事などありましたので紹介しておきます。
Rails初心者が Active Reccordについてまとめてみた
ここでは触れてないですがO/Rマッピングについても書かれているのでぜひ!

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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした