0
0

More than 1 year has passed since last update.

【Rails7】マイグレーション作成からビュー表示までの手順

Posted at

概要

マイグレーションを作成し、ビューを表示するまでのチートシートです。
ハッカソンでフロントエンドとバックエンドのメンバーを分けた際に、早くビューを編集可能にしたかったので作成しました。
とにかくビューの編集に早く着手したいという人向け。

マイグレーションは後から編集するのにファイルを追加する必要があり、最初に詳細に設定することが重要であると考えているため、情報量多めです。

環境
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に関する制約・デフォルト値に関する設定
#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
複数カラムのユニーク制約の設定方法
インデックスをつけて複数カラムのユニーク制約をつけることも可能。ただし、ユニーク制約をつけることは本来のインデックスの役割ではないのでご注意ください。 ```ruby add_index :article_tag_maps, [:article_id, :tag_id], unique: true # モデル側にも以下のバリデーションをつけることを推奨 # validates :article_id, uniqueness: { scope: :tag_id } # validates :tag_id, uniqueness: { scope: :article_id } ```

マイグレーション実行

rails db:migrate

ルーティング作成

7つのアクション(index,show,new,create,edit,update,destroy)のルーティングを作成

config/routes.rb
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

コントローラーに必要なメソッドを記述

app/controllers/articles_controller.rb
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

0
0
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
0
0