こちらの記事を参考にまとめました。
モデル作成では
「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;
でまだ表示される状態)。
たとえば、以下のように3つのモデルの削除を実行しましたが、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 g migration entries
invoke active_record
create db/migrate/20230428015950_entries.rb
作成したファイルに、以下のように記述
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つ分実行します。
マイグレーションスクリプトの削除は下記のサイトが参考になるかもしれません。
追記 (2023.5.6)
こちらの記事によると、rails destroy model
コマンドは使わないほうがいいようです。そのため、モデルを削除する場合は記事の通りにしましょう。