Help us understand the problem. What is going on with this article?

Rails モデル データベース 基礎

Rails基礎知識

  • データベース
  • モデル

データベース

ある特定の条件に当てはまる「データ」を複数集めて、後で使いやすい形に整理した情報のかたまりのことを表します。
例えば、ジムの会員情報をデータベースで扱うなら「会員番号」「名前」「住所」「会員タイプ」等の情報の保存が必要になります。
この情報を元にデータベースのテーブルを作成してその中のカラムとレコードに情報が格納されていくようなイメージです。

※ジムのテーブルを作成したとします。

会員ID 名前 住所 会員タイプ
1 山田 太郎 〇〇県〇〇市 フルタイム
2 田中 誠一 〇〇県〇〇市 ナイトタイム
3 佐伯 敬太 〇〇県〇〇市 デイタイム

テーブル

上記の表の塊がテーブルといいます。

カラムとレコード

表の縦の列をカラムといい、横の列をレコードといいます。

DB設計

アプリケーション開発において大半のデータはデータベース内に保持されます。どのようなデータをどういう形式で設計するかによって、品質は大きく左右されます。例えば、設計図なしに家や車はつくれないのと同様に、データベース設計なしにデータベースを作成するとサービスの重要な部分が成り立たなくなります。

DB設計の手順

  • テーブルの抽出
  • テーブルの定義
  • テーブルの構造を整理
  • ER図(テーブルの図)の作成

今回は、簡単なつぶやき投稿アプリの為、3つのテーブルを作成します。

モデル

コントローラでモデルを利用してテーブルからデータを引き出し、ビューに渡すことになります。
モデルファイルを使用するとRailsで、データベースのデータを簡単に扱えるようになります。

モデルを生成する

それでは早速、モデルを生成していきましょう。Railsで、生成するコマンドは以下でしたね。

$ rails g

モデル生成の場合は、

$ rails g model モデルクラス名(全て小文字)

コントローラー同様にこのコマンドを実行するだけで簡単に生成できます。
app/models/〇〇.rb

謝って作成したモデルを削除する場合

$ rails d model モデル名

マイグレーション

モデルを生成したときに「テーブルの設計図」となるマイグレーションファイルも自動で生成されています。ここまででは、まだテーブル生成されていなく、マイグレーションを実行してはじめてテーブルが生成されます。
db/migrate/

マイグレーションファイルにテーブル設計記述

class Tweet < ApplicationRecord
  def change
    create_table :tweets do |t|
      t.string :name
      t.text   :text
      t.text   :image
      t.timestamps null: true
    end
  end
end

tweetテーブルにname、text、image、timestampのカラムを設計する記述ができました。
設計ができたら、コマンドでマイグレーションを実行してテーブルを作成しましょう。

$ rake db:migrate

これで、テーブルが生成されました。

カラムの型について

型の種類 説明 用例
integer 数字 ユーザーIDなど
string 文字(少) ユーザー名、パスワードなど
text 文字(多) 投稿文など
boolean 真か偽か 真偽グラフ
datetime 日付と時刻 作成日時、更新日時など

スキーマファイル

スキーマファイルは、マイグレーションファイルを実行した際に更新がおこなわれます。そして最新のマイグレーションファイルのバージョンが記録されます。
db/schema.rb

GUIを使ってデータベースを確認する

  • Sequel pro
  • Tableplus

MYSQLを扱うならどちらかがおすすめです。使い方については割愛します。

Railsコンソールを使ってデータを操作してみる

ターミナルで下記のコマンドを実行すると立ち上がります。

$ rails c
[1] pry(main)> exit

で抜けることができます。

ActiveRecordの知識

RubyのGemの一種です。このGemはモデルとテーブルをつなぎ合わせることで、Railsからテーブルのレコードにアクセスできるようにします。これから出てくるメソッドは、ApplicationRecordというクラスを継承しており、そのクラスにメソッドが定義されているから使用できるようになっています。

allメソッド

allメソッドはApplicationRecordを継承したモデルと結びつくテーブルのレコードを全て取得します。

pry(main)>user = User.all

newメソッド

newメソッドはクラスのインスタンスを生成するメソッドです。

pry(main)>user = User.new(〇〇)

saveメソッド

saveメソッドを実行するとテーブルに保存されます。
newメソッドを保存することに使われることが多いです。

pry(main)>user.save

createメソッド

newとsaveメソッドを一括でおこなってくれます。

pry(main)>user = User.create(〇〇)

find()メソッド

id番号を取得する際に使います。

pry(main)>user = find(idの数値)

find_byメソッド

id以外のカラムを取得します。

pry(main)>user = find_by()
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away