3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

初学者によるプログラミングMemo #9 Model基礎知識

Last updated at Posted at 2019-12-27

はじめに

今回はDBの基礎知識についてもう少しお話しします
内容はいつも通りしょぼいです笑
なお、本記述はMacにおいて、Railsでの開発を前提としています
また、まだまだひよっこですので、不備等ございましたらご指摘いただけると幸いです

目次

  • ActiveRecordについて
  • アソシエーションについて

ActiveRecordについて

ActiveRecordとは、一言で言うと「RubyとSQLの翻訳機」だそうです
基本的にDBにはDB言語としてSQLが使われています
SQL出ないとDBの操作ができないわけです
RailsにはModelにActiveRecordが適用されているおかげでRubyを用いてDBからデータを探したり、持ってきたりすることができます
どのDBを仕様してもRubyで統一できるのも特徴です
ActiveRecordでは色々なメソッドがあります
主にControllerに記述するメソッドとして

.rb
# 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へ保存する
.rb
# 参照に関するメソッド

@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に以下のように記載することで関連づけられる

tweet.rb
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:多

この関係の場合、各モデルには以下のように記載します

user.rb
class User < ApplicationRecord
  has_many : tweets
  has_many : comments
end
tweet.rb
class Tweet < ApplicationRecord
  has_many : comments
  belongs_to : user
end
comment.rb
class Tweet < ApplicationRecord
  belongs_to : tweet
  belongs_to : user
end

"has_many"のあとは必ず複数形、"belongs_to"のあとは必ず単数形で記述します

まとめ

  • ActiveRecordはRubyとSQLの翻訳機
  • いろんなメソッドが使える
  • アソシエーションはDBのテーブルとテーブルを紐づけること
  • "has_many"のあとは必ず複数形、"belongs_to"のあとは必ず単数形で記述
参考記事

3
2
0

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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?