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?

More than 1 year has passed since last update.

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

Last updated at Posted at 2023-03-07

こちらの記事を参考にまとめました。

モデル作成では
「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コマンドは使わないほうがいいようです。そのため、モデルを削除する場合は記事の通りにしましょう。

参考

0
0
2

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?