はじめに
いつも何気なくコントローラに@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が適用されているため)
class ApplicationRecord < ActiveRecord::Base #ここでApplicationRecordにActiveRecordを継承
self.abstract_class = true
end
class Blog < ApplicationRecord #BlogモデルにそのApplicationRecordを継承
end
図で表すとこんな感じ
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マッピングについても書かれているのでぜひ!