0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

rails コマンド まとめ (モデル コントローラー マイグレート)

Last updated at Posted at 2024-06-08

はじめに

ポートフォリオ作成に入って、コマンドのルールなんだったけ?
と忘れていることが多々あったので、よく使用するコマンドをアウトプットのためにまとめています!
都度追加予定です。

アプリケーション作成

最初に必ず行うアプリケーション作成です
今回は「my_crop_plan」というアプリを作成していきます

$ rails new アプリケーション名
$ rails new my_crop_plan

model作成

基本中の基本model作成です
今回は「Plan」という投稿用モデルを作成していきます

$ rails g model モデル名
$ rails g model Plan

この g は、generateの略です。生成という意味です

🌱modelの命名規則
英数字の単数形で指定し、先頭は大文字で記述するルールがあります
もし複数の単語を組み合わせる場合は、「PostPlan」などにしましょう

モデル作成時にカラムを追加する方法1

モデルを作成するときに一緒にカラムを追加できます!(migrateを忘れずに)
今回はRelationshipモデルを作成します
モデル名 カラム名:データ型↓

$ rails g model Relationship follower_id:integer followed_id:integer
$ rails db:migrate

モデル作成時にカラムを追加する方法2(外部キーの場合)

🌱中間テーブルを作成するときに便利なコマンドです!

$ rails g model PlanTag plan:references tag:references
$ rails db:migrate

referencesとは(直訳:参照、参考)
名前の通り、作成済みのテーブルを参照する場合に使用します
コマンドを実行すると下記カラムがマイグレーションファイルに自動追加されます

t.references :plan, null: false, foreign_key: true
t.references :tag, null: false, foreign_key: true

後からマイグレーションファイルに追加することも可能!
アソシエーションの「belongs_to」を自動追記
※「has_many」は追加してくれないので注意⚠️

参考URL:https://prograshi.com/framework/rails/references_and_foreign-key/

model削除

誤って作成したmodelを削除します
今回は先ほど作成した「Plan」モデルを削除していきます

$ rails d model モデル名
$ rails d model Plan

controller作成

同じく基本のcontroller作成です
先ほどの「Plan」モデルの「plans」のコントローラーを作成します
3パターン記載していきます

通常のcontroller作成

$ rails g controller コントローラー名
$ rails g controller plans

controller作成 + ルーティング・ビューを同時に作成

$ rails g controller plans new index show

自動作成される↓

plans_controller.rb
class PlansController < ApplicationController
  def new
  end

  def index
  end

  def show
  end
end
routes.rb
Rails.application.routes.draw do
  get 'plans/new'
  get 'plans/index'
  get 'plans/show'
end
index.html.erb
<h1>Public::Plans#index</h1>
<p>Find me in app/views/public/plans/index.html.erb</p>

controller作成 + ルーティング・ビューを同時に作成 + 保存場所をpublicフォルダに指定

$ rails g controller public/plans new index show

publicファイルに全て作成されたりルーティングされたりします!
不要なものを自分で削除したり修正しましょう!

🌱controllerの命名規則
複数形かつ全て小文字で書くのがルールです
もし複数の単語を組み合わせる場合は、「post_plans」などにしましょう

migration

マイグレーションファイルを修正したい!
って時に使用するコマンドを紹介します!

ステータス確認

rails db:migrate:statusをすると現在のステータスを確認できます
MigrationIDなどあとで使用する情報もここに含まれています!

$ rails db:migrate:status

Running via Spring preloader in process 13765

database: db/development.sqlite3

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20240601103957  Devise create users
   up     20240602043254  Create plans
   up     20240608084410  Create comments
   up     20240608115131  Create likes
   up     20240611072708  Create relationships
   up     20240613025152  Create rooms
   up     20240613025320  Create chats
   up     20240613025358  Create user rooms

リセット

まだ何もデータがない時ならresetをすることでマイグレーションファイルをschema.rbに反映できます!既にデータを保存している場合は、消えてしまうのでそれでもよかったらリセットしましょう!
例)既に会員登録をしてユーザーが存在している、投稿している
→ ユーザーが全て消えます!、投稿データも消えます!

$ rails db:migrate:reset

ロールバック1

直近に作成した1つのマイグレーションファイルをdownにすることができます!

$ rails db:rollback

ステータスを確認してみると↓

$ rails db:migrate:status

Running via Spring preloader in process 18072

database: db/development.sqlite3

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20240601103957  Devise create users
   up     20240602043254  Create plans
   up     20240608084410  Create comments
   up     20240608115131  Create likes
   up     20240611072708  Create relationships
   up     20240613025152  Create rooms
   up     20240613025320  Create chats
  down    20240613025358  Create user rooms

一番下のuser roomsがdownになりました!
この状態でマイグレーションファイルを修正し、rails db:migrateを実行すると、user roomsの変更点がschema.rbに反映されてステータスがupに戻るはずです!

マイグレーションファイルの修正をデータベースに反映させるには、一度ステータスをdownにしてからrails db:migrateを実行する必要があります!
migrateしたら反映されているかschema.rbを確認するようにしましょう!

ロールバック2

直近の3つのファイルをdownに変更するコマンド

$ rails db:rollback STEP=3
$ rails db:migrate:status

Running via Spring preloader in process 19522

database: db/development.sqlite3

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20240601103957  Devise create users
   up     20240602043254  Create plans
   up     20240608084410  Create comments
   up     20240608115131  Create likes
   up     20240611072708  Create relationships
  down    20240613025152  Create rooms
  down    20240613025320  Create chats
  down    20240613025358  Create user rooms

ロールバック3

指定のマイグレーションファイルをdownにするコマンド

$ rails db:migrate:down VERSION=該当のMigrationID

例)chatsのファイルだけを修正したい場合

$ rails db:migrate:down VERSION=20240613025320
$ rails db:migrate:status

Running via Spring preloader in process 19522

database: db/development.sqlite3

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20240601103957  Devise create users
   up     20240602043254  Create plans
   up     20240608084410  Create comments
   up     20240608115131  Create likes
   up     20240611072708  Create relationships
   up     20240613025152  Create rooms
  down    20240613025320  Create chats
   up     20240613025358  Create user rooms

あとは修正したいファイルを修正して、rails db:migrateするだけです!

grepコマンド省略形

ルーティングを確認するのに、今までgrepで絞り込んでいましたが
省略形を教えていただきました!!!
打ちやすい!!!

$ rails routes | grep user

$ rails routes -g user

RSpecテスト実行コマンド

全てのテストを走らせる

$ bundle exec rspec spec/ --format documentation

ファイルを指定してテストを走らせる

今回はsystemの中のplans_spec.rbのみ走らせる

$ bundle exec rspec spec/system/plans_spec.rb  --format documentation

ファイルを指定かつ行数を指定してテストを走らせる

今回は先ほどのファイルの156行目から一連のテストを走らせる

$ bundle exec rspec spec/system/plans_spec.rb:156  --format documentation

さいごに

メモがてら都度追加予定です!

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?