【Rails】rails g model コマンドでモデルを作成しよう!

Rails

rails g modelコマンドとは

railsでモデルを作成するときに使うコマンドです。

モデルとは
リンクをコピーしました

モデルとはMVCの「M」に当たる部分で、データベースとのやり取りを担当する役割を持っています。
モデルはコントローラーからの指示に従ってデータベースから必要なデータを取得してコントローラーへ返します。

コントローラーからデータベースまでの流れ

データの取得だけではなく、データの更新や削除をします。
また、データの検証(バリデーション)やテーブルとの関連付け(アソシエーション)などもモデルが担当します。

使い方
リンクをコピーしました

このモデルを作成するコマンドが「rails g model」コマンドです。
「g」は「generate」の略で「rails generate mode」も同じコマンドになります。
実際には下記のように記述します。

ターミナル
1
$ rails g model モデル名

例えばArticleモデルを作成するときのコマンドは下記のようになります。

ターミナル
1
$ rails g model Article

作成されるファイル
リンクをコピーしました

このコマンドによりモデルファイルとそのモデルが担当するテーブルを作成するためのマイグレーションファイルが自動で作成されます。

ターミナル
1
2
3
4
5
6
7
Running via Spring preloader in process 55415
invoke  active_record
      create    db/migrate/20190101010101_create_articles.rb  #マイグレーションファイル
      create    app/models/article.rb  #モデルファイル
      invoke    test_unit
      create      test/models/article_test.rb
      create      test/fixtures/articles.yml

以上のようなファイルがこのコマンドにより作成されます。

カラムの追加
リンクをコピーしました

「rails g model モデル名」の後に下記のように記述すると作成されるマイグレーションファイルにカラムを追加するコードが自動で書かれた状態でマイグレーションファイルが作成されます。

ターミナル
1
2
3
4
$ rails g model モデル名 カラム名:カラムの型

# 複数のカラムも追加が可能
$ rails g model モデル名 カラム名:カラムの型 カラム名:カラムの型

例えば下記のようなコマンドを打つとします。

ターミナル
1
$ rails g model Article text:text name:string

すると下記のようなマイグレーションファイルが作成されます。

マイグレーションファイル
1
2
3
4
5
6
7
8
9
10
class CreateArticles < ActiveRecord::Migration[5.2]
  def change
    create_table :articles do |t|
      t.text :text
      t.string :name

      t.timestamps
    end
  end
end

カラムの型を書かずにカラム名だけで指定すると全てstring型になります。

ターミナル
1
2
# カラム名だけ記述
$ rails g model Article name

このときは下記のマイグレーションファイルが作成されます。

マイグレーションファイル
1
2
3
4
5
6
7
8
9
class CreateArticles < ActiveRecord::Migration[5.2]
  def change
    create_table :articles do |t|
      t.string :name

      t.timestamps
    end
  end
end

一意制約の追加
リンクをコピーしました

「rails g model モデル名」の後に下記のように記述すると作成されるマイグレーションファイルにカラムを追加するコードとindex、一意制約が自動で書かれた状態でマイグレーションファイルが作成されます。

ターミナル
1
$ rails g model モデル名 カラム名:カラムの型:uniq

例えば下記のコマンドを入力したとします。

ターミナル
1
$ rails g model Article text:text:uniq

このとき下記のマイグレーションファイルが作成されます。

マイグレーションファイル
1
2
3
4
5
6
7
8
9
10
class CreateTweets < ActiveRecord::Migration[5.2]
  def change
    create_table :tweets do |t|
      t.text :text

      t.timestamps
    end
    add_index :tweets, :text, unique: true
  end
end

モデルの命名規則
リンクをコピーしました

モデルはクラスとして作成するので大文字で始まる単数形の名前にします。
モデルに関連するコントローラーとテーブルの名前は下記の規約に基づいて命名します。

種類 名前
モデル名 大文字から始まる単数形 Tweet
コントローラー名 小文字から始まる複数形 tweets
テーブル名 小文字から始まる複数形 tweets

これはrailsの規約で決まっているので、必ずこの名前にしましょう。

作成したモデルを消去する方法
リンクをコピーしました

間違って作成してしまったモデルは下記のコマンドにより消去することができます。

ターミナル
1
$ rails d model モデル名

「d」は「destroy」の略で「rails destroy model」でも同じコマンドになります。

このコマンドにより、「rails g model モデル名」コマンドによって作成された全ファイルが削除されます。
手動でも削除できますが、このコマンドで削除する方が確実です。

まとめ
  • rails g modelコマンドはモデルを作成するコマンドです。
  • モデルの他にそのモデルが担当するテーブルを作成するためのマイグレーションファイルも作成されます。
  • rails d modelコマンドで作成したモデルを削除することができます。