ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
基本: rails g model
Rails で新しいモデル(テーブル)を作るときは generate model ジェネレータを使います。1 コマンドでモデルクラスとマイグレーション、テストファイルがまとめて生成されます。
# User モデル(name 文字列、age 整数)を作成
bin/rails generate model User name:string age:integer
# 省略形
rails g model User name:string age:integer
生成されるファイル例:
| ファイル | 役割 |
|---|---|
app/models/user.rb | モデルクラス(ApplicationRecord 継承) |
db/migrate/YYYYMMDDHHMMSS_create_users.rb | テーブル作成マイグレーション |
test/models/user_test.rb | モデル単体テスト |
test/fixtures/users.yml | テスト用フィクスチャ |
使えるカラム型
| 型 | 用途 | 例 |
|---|---|---|
string | 短い文字列(VARCHAR 255) | name:string |
text | 長文(TEXT) | body:text |
integer | 整数 | age:integer |
bigint | 大きな整数(ID 系) | views:bigint |
float / decimal | 小数 / 厳密小数 | price:decimal{10,2} |
boolean | 真偽値 | published:boolean |
date / datetime | 日付 / 日時 | published_at:datetime |
references | 外部キー(belongs_to も自動付与) | user:references |
:uniq 修飾 | UNIQUE インデックス付与 | email:string:uniq |
:index 修飾 | 通常インデックス付与 | slug:string:index |
リレーション付きで作る
references 型を使うと、外部キーカラム / インデックス / belongs_to の宣言までまとめて入ります。
# Post belongs_to User
bin/rails g model Post title:string body:text user:references
# Comment belongs_to Post and User
bin/rails g model Comment body:text post:references user:references# 生成されたモデル
class Post < ApplicationRecord
belongs_to :user
end
# 1 対多の反対側は手動で追加する
class User < ApplicationRecord
has_many :posts, dependent: :destroy
end
生成されたマイグレーション例
class CreateUsers < ActiveRecord::Migration[7.1]
def change
create_table :users do |t|
t.string :name, null: false
t.string :email, null: false
t.integer :age
t.timestamps # created_at / updated_at
end
add_index :users, :email, unique: true
end
end
DB へ反映する
# マイグレーションを実行(テーブル作成)
bin/rails db:migrate
# 状態確認
bin/rails db:migrate:status
# 1 つ戻す(誤りに気づいたとき)
bin/rails db:rollback
# 巻き戻して再実行
bin/rails db:migrate:redo
バリデーションを足す
DB 制約とは別に、モデル側でアプリ層のバリデーションを書きます。save 失敗時にエラーメッセージを返してくれます。
class User < ApplicationRecord
validates :name, presence: true, length: { maximum: 50 }
validates :email, presence: true,
uniqueness: { case_sensitive: false },
format: { with: URI::MailTo::EMAIL_REGEXP }
validates :age, numericality: { only_integer: true,
greater_than_or_equal_to: 0 },
allow_nil: true
end
やり直し: 取り消し方
| 状況 | 手順 |
|---|---|
まだ db:migrate していない | bin/rails destroy model User でファイル削除 |
| すでに反映済み | bin/rails db:rollback でテーブル削除 → destroy |
| カラム追加 / 削除 | 新しいマイグレーションを g migration で作成(過去ファイルは編集しない) |
関連
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
同階層のページ
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?