Railsでモデルとテーブルを作成/削除する方法

[こちらの記事](https://qiita.com/Takka_Log/items/216c2665aeae885d1cdc)を参考にまとめました。

モデル作成では
「rails db:migrate」も一緒に実行する必要があります。

削除については
 **「モデルの削除 ≠ テーブルの削除」** 
なので注意。別々に操作を行う必要があります。

## モデルの作成
```
rails g model User
rails db:migrate
```

#### 例：`User`モデルの作成
```
$ rails g model User name:string email:string
      invoke  active_record
      create    db/migrate/20230307115327_create_users.rb
      create    app/models/user.rb
      invoke    test_unit
      create      test/models/user_test.rb
      create      test/fixtures/users.yml
$ rails db:migrate
== 20230307115327 CreateUsers: migrating ======================================
-- create_table(:users)
   -> 0.0962s
== 20230307115327 CreateUsers: migrated (0.0963s) =============================
```

テーブルが作成されたかMySQLコマンドで確認
```
mysql> show tables;
+----------------------+
| Tables_in_agri       |
+----------------------+
| ar_internal_metadata |
| schema_migrations    |
| users                |
+----------------------+
3 rows in set (0.00 sec)
```
作成成功


## モデルの削除
```
rails destroy model モデル名
```

#### 例：`User`モデルの削除
```
$ rails destroy model User
      invoke  active_record                       
      remove    db/migrate/20230307094843_create_users.rb
      remove    app/models/user.rb
      invoke    test_unit
      remove      test/models/user_test.rb
      remove      test/fixtures/users.yml
```

## テーブルの削除
MySQLにログイン後、使用するデータベースを選択しておくこと
```
mysql> drop table テーブル名;
```
#### 例：`users`テーブルの削除
```
mysql> show tables;
+----------------------+
| Tables_in_agri       |
+----------------------+
| ar_internal_metadata |
| schema_migrations    |
| users                |
+----------------------+
3 rows in set (0.01 sec)

mysql> drop table users;
Query OK, 0 rows affected (0.08 sec)
```

## 追記 (2023.4.28)
モデルの削除だけではMySQLからは削除されませんでした(`show tables;`でまだ表示される状態)。
たとえば、以下のように３つのモデルの削除を実行しましたが、MySQLで見ると消えていませんでした。
```
$ rails destroy model Message
      invoke  active_record
      remove    db/migrate/20230427105021_create_messages.rb
      remove    app/models/message.rb
      invoke    rspec
      remove      spec/models/message_spec.rb
$ rails destroy model Entry
      invoke  active_record
      remove    db/migrate/20230427105006_create_entries.rb
      remove    app/models/entry.rb
      invoke    rspec
      remove      spec/models/entry_spec.rb
$ rails destroy model Room
      invoke  active_record
      remove    db/migrate/20230427104959_create_rooms.rb
      remove    app/models/room.rb
      invoke    rspec
      remove      spec/models/room_spec.rb
$ rails db:migrate
```

```
mysql> show tables;
+--------------------------------+
| Tables_in_agribeit_development |
+--------------------------------+
| ar_internal_metadata           |
| entries                        |
| messages                       |
| rooms                          |
| schema_migrations              |
| users                          |
+--------------------------------+
6 rows in set (0.06 sec)
```
↑まだ消えていない

下記のようにすることでMySQLからも削除されます。
* 参考：[【Rails】データベースのテーブル、カラムの変更手順](https://zenn.dev/yuuuuu/articles/a41cc70d23d67a)

### マイグレーションファイルの作成
```
$ rails g migration entries
      invoke  active_record
      create    db/migrate/20230428015950_entries.rb
```

### 作成したファイルに、以下のように記述
```ruby:db/migrate/20230428015950_entries.rb
class Entries < ActiveRecord::Migration[7.0]
  def change
    drop_table :entries # 記述
  end
end
```
以下を実行
```
$ rails db:migrate
```

### MySQLで確認
```
mysql> show tables;
+--------------------------------+
| Tables_in_agribeit_development |
+--------------------------------+
| ar_internal_metadata           |
| messages                       |
| rooms                          |
| schema_migrations              |
| users                          |
+--------------------------------+
5 rows in set (0.00 sec)
```
きちんと消えました。
あとはこれを2つ分実行します。
マイグレーションスクリプトの削除は下記のサイトが参考になるかもしれません。
* [Ruby on Rails カラムの追加と削除 - Qiita](https://qiita.com/azusanakano/items/a2847e4e582b9a627e3a)

## 追記 (2023.5.6)
[こちらの記事](https://bokuranotameno.com/post-9880/)によると、`rails destroy model`コマンドは使わないほうがいいようです。そのため、モデルを削除する場合は記事の通りにしましょう。

### 参考
* [Rails でテーブルを削除する方法 - Just do IT](https://k-koh.hatenablog.com/entry/2020/08/18/103826)