概要
マイグレーションを作成し、ビューを表示するまでのチートシートです。
ハッカソンでフロントエンドとバックエンドのメンバーを分けた際に、早くビューを編集可能にしたかったので作成しました。
とにかくビューの編集に早く着手したいという人向け。
マイグレーションは後から編集するのにファイルを追加する必要があり、最初に詳細に設定することが重要であると考えているため、情報量多めです。
環境
M1 Mac
Docker version 24.0.5, build ced0996
Docker Compose version v2.20.2-desktop.1
ruby 3.1.4p223 (2023-03-30 revision 957bb7cb81) [aarch64-linux]
Rails 7.0.7
マイグレーション作成
モデル作成コマンドを実行すると、同時に行われるのでスキップ
モデル作成
rails generate model 名前 [カラム名:型..] [オプション]
コマンド例
rails g model article body:string title:string
実行後ターミナルの表示
$ rails generate model article body:string title:string
invoke active_record
create db/migrate/20230820024818_create_articles.rb
create app/models/article.rb
invoke test_unit
create test/models/article_test.rb
create test/fixtures/articles.yml
マイグレーション編集
DBにバリデーションが必要な場合、この時点でマイグレーションファイルを編集する。
※DBにバリデーションを後から追加する場合、新たにマイグレーションファイルを作成する必要が出てくるから
型
string : 文字列(最大文字数はおよそ255文字)
text : 長い文字列
integer : 整数
float : 浮動小数
decimal : 精度の高い小数
datetime : 日時
timestamp : タイムスタンプ
time : 時間
date : 日付
binary : バイナリデータ
boolean : Boolean型
外部キーのカラム
# ユーザテーブルに紐づいてる外部キー。非ヌル制約付き
t.references :user, foreign_key: true, null: false
マイグレーションファイルのオプションの指定
#nullを許容しない デフォルト値は名無し
add_column :users, :name, :string, null: false, default: '名無し'
# 一意性制約
add_index :users, :email, unique: true
# 計測は小数点以下第六位まで(precisionオプションの追加はrails6から)
t.datetime "updated_at", precision: 6
インデックスの追加方法
class CreatePosts < ActiveRecord::Migration[6.1]
def change
create_table :posts do |t|
t.string :title, null: false
t.text :body, null: false
t.timestamps
end
add_index :posts, :title
end
end
複数カラムのユニーク制約の設定方法
マイグレーション実行
rails db:migrate
ルーティング作成
7つのアクション(index,show,new,create,edit,update,destroy)のルーティングを作成
Rails.application.routes.draw do
# resources リソース名
resources :articles
end
コントローラ作成
rails g controller コントローラー名
コマンド例
rails g controller articles
実行後ターミナルの表示
$ rails g controller articles
create app/controllers/articles_controller.rb
invoke erb
create app/views/articles
invoke test_unit
create test/controllers/articles_controller_test.rb
invoke helper
create app/helpers/articles_helper.rb
invoke test_unit
コントローラーに必要なメソッドを記述
class ArticlesController < ApplicationController
# 以下2行が追記(showやcreateなど他にも必要なメソッドがあれば追記)
def index
end
end
ビュー作成
コントローラーをコマンドで作成した際に、app/views
配下にコントローラー名と一致するディレクトリが作られている。
※このqiita記事の場合だとapp/views/articles
ディレクトリ
当該ディレクトリ内にメソッド名を用いたビューを作成する。
touch app/views/articles/index.html.erb
ページを表示
http://localhost:3000/<リソース名> にアクセスする。
当記事の場合、 http://localhost:3000/articles にアクセス。
ビューの中身が空っぽであるため、真っ白なページが表示されれば成功!
参考
https://railsdoc.com/page/rails_generate_model
https://railsdoc.com/routes
https://railsdoc.com/controller
https://railsdoc.com/page/rails_generate_controller