※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。
データベースにデータを保存する
前回作ったデータベースに、試しにデータを保存、取得してみる
warp画面で$ rails c
を入力し、コンソール画面を立ち上げる
以下のデータを保存してみる
- title:title
- content:ブログだよ!!
Article.create(title: 'title', content: 'ブログだよ!!')
↓ すると、railsが自動でSQLを実行してくれる!
INSERT INTO "articles"
("title", "content", "created_at", "updated_at")
VALUES (?, ?, ?, ?) [
["title", "title"],
["content", "ブログだよ!!"],
["created_at", "2024-08-10 05:14:56.690198"],
["updated_at", "2024-08-10 05:14:56.690198"]
]
あわせて、「created_at」「updated_at」も保存してくれている
Article.first
で最初の記事を確認できる
ActiveRecordを使用している
↓ ArticleモデルはApplicationRecordを継承している
↓ ApplicationRecordはActiveRecord::Baseを継承している
このActiveRecordを継承しているおかげで、たくさんのことができる
SQLを書かずにSQLを実行することだって出来る
ActiveRecordは直感で書けるのでSQLより断然書きやすい!
SQLを直接書かずにSQLを実行する機能を「ORマッパー」と呼び、railsはその中のActiveRecordを使っている
データを取得する
↓HomeControllerに以下を入力する
class HomeController < ApplicationController
def index
# Articleの一番最初の記事を変数にいれる
@article = Article.first
end
end
↓view(html)に以下を記載する
<h2><%= @article.title %></h2>
<h2><%= @article.content %></h2>
- Article.firstで最初の記事を取得
- 変数「@article」に入れる
- 「@article.title」「@article.content」と使える
最初の記事が表示される
controllerがmodelからデータを持ってきて、viewでhtmlを表示する
「.find」と「.find_by」について
idを指定して、レコードを取得する
例)Article.find(5)
id以外でレコードを検索する
例)Article.find_by(title: "素晴らしい記事")
.findと.find_byで結果が違う
例)id: 1のレコードを確認したい
Article.find(1)
# エラーが発生して処理が止まる
Article.find_by(id: 1)
# 正しく動き、nil が返ってくる
「id:1」に情報が入っているのか(存在しているか確認したい)
→ .find_by
を使う
「first」「second」「third」と「last」について
開発時、適当にレコードを取得したいとき、デバックに使いたいときに
- 1番目の情報を取得したい
→Article.fist
- 2番目の情報を取得したい
→Article.second
- 3番目の情報を取得したい
→Article.third
・・・ - 最後の情報を取得したい
→Article.last
「all」「order」「limit」について
Article.all
ですべての情報を取得できる
Article.allと
は、Article.first
のようなレコードが複数集まっているもの
「配列」になっているため、Article.all.each
で複数回、実行することができる
Article.all.order()
で、データをすべて取得したあとの処理も指定できる
例)Article.all.order(:id)
Articleのレコードをidが小さい順に並べ替える(昇順)
例)Article.all.order(id: :desc)
Articleのレコードをidが大きい順(:desc
)に並び替える(降順)
膨大なレコードがある場合、.all
では負荷がかかりすぎる
→ .limit(◯)
で取得するレコードの数を限定する
例)Article.all.limit(3)
Articleのすべてのレコードから3件だけ取得する
さらに指示を追加することができる
例)Article.all.order(id: :desc).first
Articleのレコードを降順に並び替えて、1番目のレコードを取得する
例)Article.all.order(id: :desc).limit(3)
Articleのレコードを降順に並び替えて、3件だけレコードを取得する
組み合わせてレコードを取得することができる
「where」「count」について
条件にあったレコードをすべて取得する
例)Article.where(id: 5)
id:5の条件にあった1件が取得できる
結果1件しか取得できなくても、配列に入っている
取得したレコードは1件なので、article.title
でid:5のタイトル情報が取得できそう
取得したレコードは配列[article]
に入っているので、正しく指定する
id:24に該当するレコードのうち、インデックス番号[0]のタイトル
Article.where(id:24)[0].title
# => "素晴らしい記事"
id:24に該当するレコードのうち、最初のレコードのタイトル
Article.where(id:24).first.title
# => "素晴らしい記事"
条件をつけてレコードを取得する
例)Article.where('id > 5')
idが5より大きいレコードをすべて取得できる
別の書き方(やっていることは同じ)
Article.where('id > ?', 5)
「?」に代入する形で、第2引数に条件を入力する
条件を指定したとき、レコードが何件取得できたか教えてくれる
#DAY7