はじめに
今回はDBの基礎知識についてもう少しお話しします
内容はいつも通りしょぼいです笑
なお、本記述はMacにおいて、Railsでの開発を前提としています
また、まだまだひよっこですので、不備等ございましたらご指摘いただけると幸いです
目次
- ActiveRecordについて
- アソシエーションについて
ActiveRecordについて
ActiveRecordとは、一言で言うと「RubyとSQLの翻訳機」だそうです
基本的にDBにはDB言語としてSQLが使われています
SQL出ないとDBの操作ができないわけです
RailsにはModelにActiveRecordが適用されているおかげでRubyを用いてDBからデータを探したり、持ってきたりすることができます
どのDBを仕様してもRubyで統一できるのも特徴です
ActiveRecordでは色々なメソッドがあります
主にControllerに記述するメソッドとして
# Createに関するメソッド
@tweet = Tweet.new(title: "タイトル", content: "内容")
# モデルのインスタンスを作成
@tweet = Tweet.build(title: "タイトル", content: "内容")
# newと同じ、可読性を上げるため関連モデルのインス端子にする時によく使われる
@tweet.save
# newやbuildで作った@tweetをDBに保存する
Blog.create(title: "タイトル", content: "内容")
# newとsaveを組み合わせて生成と同時にDBへ保存する
# 参照に関するメソッド
@tweet = Tweet.all
# tweetsテーブルから全レコードを配列をして取得
@tweet = Tweet.first
# tweetsテーブルのidが一番小さいレコードを取得
@tweet = Tweet.last
# tweetsテーブルのidが一番大きいレコードを取得
@tweet = Tweet.find()
# 引数に入っている数字と同じidのレコードを取得
@tweet = Tweet.find_by(title: "タイトル")
# 引数に入っている条件とあっているもので一番若いidのレコードを取得
@tweet = Tweet.where(title: "タイトル")
# 引数に入っている条件とあっている全てのレコードを取得
@tweet = Tweet.order(id: :desc)
# 引数に入っているカラムを:asc(昇順)または:desc(降順)に並び替えてレコードを取得
@tweet = Tweet.select(:title)
# 引数に入っている名前のカラムのみを取得
@tweet = Tweet.limit()
# 引数に入っている数字の数だけidの若い順にレコードを取得
これだけあります
私自身もよくわかっていないまま使っていました
アソシエーションについて
アソシエーションとはDBのテーブルとテーブルを紐づけること
それによって、関連するデータの読み書きを容易にするための機能
Modelに以下のように記載することで関連づけられる
class Tweet < ApplicationRecord
has_many :comments
belongs_to :user
end
"has_many"と"belongs_to"はモデルクラスに記載するメソッドです
今、"Users","Tweets","Comments"テーブルがあるとします
一人のユーザーはたくさんのツイートができて、各ツイートにはたくさんのコメントができるとします
また、逆から考えると、一つのコメントは必ずどこか一つのツイートに属し、一つのツイートも必ずどこかのユーザー一人に属しています
そしてユーザーはコメントをたくさんすることができ、一つのコメントはどこかのユーザー一人に属しています
このような場合、以下のような関係が成り立ちます
"Users" : "Tweets" = 1:多
"Tweets" : "Comments" = 1:多
"Users" : "Comments" = 1:多
この関係の場合、各モデルには以下のように記載します
class User < ApplicationRecord
has_many : tweets
has_many : comments
end
class Tweet < ApplicationRecord
has_many : comments
belongs_to : user
end
class Tweet < ApplicationRecord
belongs_to : tweet
belongs_to : user
end
"has_many"のあとは必ず複数形、"belongs_to"のあとは必ず単数形で記述します
まとめ
- ActiveRecordはRubyとSQLの翻訳機
- いろんなメソッドが使える
- アソシエーションはDBのテーブルとテーブルを紐づけること
- "has_many"のあとは必ず複数形、"belongs_to"のあとは必ず単数形で記述
参考記事