LoginSignup
493
414

More than 5 years have passed since last update.

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

Posted at

はじめに

いつも何気なくコントローラに@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マッピングについても書かれているのでぜひ!

493
414
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
493
414