【Rails】コントローラー系とモデル系の作成コマンドと書き方 総まとめ

コントローラー系とモデル系の作成コマンドと書き方に関して、日頃自分が知りたいと思い都度ググっている情報を全部まとめた。(オプション系は省略)似たような誰かのためにもなったら嬉しい。


コントローラー系


コントローラーとビューの作成

$ rails g controller コントローラー名(複数形) アクション名

サンプル

$ rails g controller Tweets index

生成されるもの

  • controllers内に tweets_controller.rb
  • views内に tweetsフォルダ
  • views内のtweetsフォルダ内に index.html.erb


コントローラーのみ作成

なし


モデル系


モデルとマイグレーションファイルの作成

$ rails g model モデル名(単数形) カラム名:データ型

※カラムを複数作る時でもカンマは不要。

サンプル

$ rails g model Tweet user_id:integer tweet:text

生成されるもの

  • models内に tweet.rb
  • db/migrate内に YYYYMMDDHHMMSS_create_tweets.rb


マイグレーションファイルのみ作成

$ rails g migration Addカラム名Toテーブル名 カラム名:データ型

※カラム削除の場合はRemoveカラム名Fromテーブル名とする。他にもRenameとか色々あるけど個人的にはあまり使わないので割愛。
※カラムを複数作る時でもカンマは不要。

サンプル

$ rails g migration AddTitleToTweets title:string

生成されるもの

  • db/migrate/内に YYYYMMDDHHMMSS_add_title_to_tweets.rb


マイグレーションファイルの中身/書き方


新規テーブル作成
class モデルクラス名 < ActiveRecord::Migration
  def change
    create_table :テーブル名 do |t|
      t.データ型 :カラム名, null: nullを許可するかどうか(true or false), default: デフォルト値, comment: 'コメント'

      t.timestamps
    end
  end
end

サンプル

class CreateLikes < ActiveRecord::Migration
  def change
    create_table :likes do |t|
      t.integer :tweet_id, null: false, default: 0, comment: 'いいねされたツイートのID'
      t.integer :user_id, null: false, default: 0, comment: 'いいねしたユーザーのID'

      t.timestamps
    end
  end
end


カラム追加
class モデルクラス名 < ActiveRecord::Migration
  def change
    add_column :テーブル名, :追加したいカラム名, :データ型, after: :どのカラムの後に追加するか, null: nullを許可するかどうか(true or false), default: デフォルト値, comment: 'コメント'
  end
end

サンプル

class AddTitleToTweets < ActiveRecord::Migration
  def change
    add_column :tweets, :title, :string, after: :tweet, null: false, default: '', comment: 'ツイートのタイトル'
  end
end


カラム削除
class モデルクラス名 < ActiveRecord::Migration
  def change
    remove_column :テーブル名, :削除したいカラム名, :データ型
  end
end

サンプル

class RemoveTitleFromTweets < ActiveRecord::Migration
  def change
    remove_column :tweets, :title, :string
  end
end


マイグレーション実行

$ rails db:migrate