699

Railsの移行を通じてデータベーステーブルの列を削除するための構文は何ですか?

4

23 に答える 23

1017
remove_column :table_name, :column_name

例えば:

remove_column :users, :hobby

ユーザーテーブルから趣味の列を削除します。

于 2010-06-03T05:49:17.690 に答える
390

Railsの古いバージョンの場合

ruby script/generate migration RemoveFieldNameFromTableName field_name:datatype

Rails3以降の場合

rails generate migration RemoveFieldNameFromTableName field_name:datatype
于 2010-09-18T18:22:03.940 に答える
126

Rails 4が更新されたため、移行でchangeメソッドを使用して列を削除すると、移行は正常にロールバックされます。Rails3アプリケーションに関する次の警告をお読みください。

Rails3の警告

このコマンドを使用する場合は、次の点に注意してください。

rails generate migration RemoveFieldNameFromTableName field_name:datatype

生成された移行は次のようになります。

  def up
    remove_column :table_name, :field_name
  end

  def down
    add_column :table_name, :field_name, :datatype
  end

データベーステーブルから列を削除するときは、changeメソッドを使用しないでください(Rails 3アプリの移行ファイルに不要なものの例):

  def change
    remove_column :table_name, :field_name
  end

Rails 3のchangeメソッドは、remove_columnに関しては賢明ではないため、この移行をロールバックすることはできません。

于 2013-07-22T16:12:57.517 に答える
43

rails4アプリでは、列の削除にもchangeメソッドを使用できます。3番目のパラメーターはdata_typeであり、オプションの4番目のパラメーターでオプションを指定できます。これは、ドキュメントの「利用可能な変換」のセクションに少し隠されています。

class RemoveFieldFromTableName < ActiveRecord::Migration
  def change
    remove_column :table_name, :field_name, :data_type, {}
  end
end
于 2014-07-09T21:30:09.473 に答える
37

これを行うには2つの良い方法があります。

remove_column

次のように、remove_columnを使用するだけです。

remove_column :users, :first_name

これは、スキーマに1つの変更を加えるだけでよい場合は問題ありません。

change_tableブロック

次のように、change_tableブロックを使用してこれを行うこともできます。

change_table :users do |t|
  t.remove :first_name
end

読みやすく、一度に複数の変更を加えることができるので、これが好きです。

サポートされているchange_tableメソッドの完全なリストは次のとおりです。

http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table

于 2014-04-09T12:25:33.590 に答える
27

Rails5および6の明確でシンプルな手順

  • 警告:データが失われます
  • 警告:以下の手順は、簡単な移行用です。数百万行、読み取り/書き込みデータベース、クラスターなどの複雑な移行の場合、このアドバイスは適切ではありません。

1.移行を作成します

ターミナルで次のコマンドを実行します。

rails generate migration remove_fieldname_from_tablename fieldname:fieldtype

注:テーブル名は、railsの規則に従って複数形にする必要があります。

例:

私の場合、テーブルacceptedから列(ブール値)を削除したいと思います。quotes

rails g migration RemoveAcceptedFromQuotes accepted:boolean

ドキュメントre:テーブルにフィールドを追加/削除するときの規則を参照してください。

テーブルにフィールドを追加する移行を生成するための特別な構文ショートカットがあります。

Railsは移行を生成しますadd_fieldname_to_tablenamefieldname:fieldtype

2.移行を確認します

# db/migrate/20190122035000_remove_accepted_from_quotes.rb
class RemoveAcceptedFromQuotes < ActiveRecord::Migration[5.2]
  # with rails 5.2 you don't need to add a separate "up" and "down" method.
  def change
    remove_column :quotes, :accepted, :boolean
  end
end

3.移行を実行します

rake db:migrateまたはrails db:migrate(両方とも同じです)

....そして、あなたはレースに出かけます!

于 2019-01-22T04:36:09.423 に答える
17

移行を生成して列を削除し、移行された場合(rake db:migrate)、列を削除するようにします。また、この移行がロールバックされた場合は、列を追加し直すrake db:rollback必要があります( )。

構文:

remove_column:table_name、:column_name、:type

列を削除し、移行がロールバックされている場合は列を追加し直します。

例:

remove_column :users, :last_name, :string

data_typeをスキップすると、移行によって列が正常に削除されますが、移行をロールバックするとエラーがスローされます。

于 2017-11-15T15:38:50.157 に答える
16

Rails 5では、ターミナルで次のコマンドを使用できます。

rails generate migration remove_COLUMNNAME_from_TABLENAME COLUMNNAME:DATATYPE

たとえば、テーブルusersから列access_level(string)を削除するには:

rails generate migration remove_access_level_from_users access_level:string

次に実行します:

rake db:migrate
于 2016-08-24T09:11:40.187 に答える
12

次のことを試すことができます。

remove_column :table_name, :column_name

公式ドキュメント

于 2010-05-14T00:04:39.973 に答える
12

RAILS5アプリの列を削除する

rails g migration Remove<Anything>From<TableName> [columnName:type]

上記のコマンドは、ディレクトリ内に移行ファイルを生成しますdb/migrate。スニペットブローは、Railsジェネレーターによって生成されたテーブルの例から列を削除するものの1つです。

class RemoveAgeFromUsers < ActiveRecord::Migration
  def up
    remove_column :users, :age
  end
  def down
    add_column :users, :age, :integer
  end
end

Railsのクイックリファレンスガイドも作成しました。これはここにあります。

于 2016-09-30T06:49:08.470 に答える
10
rails g migration RemoveXColumnFromY column_name:data_type

X=列名
Y=テーブル名

編集

RemoveXColumnToYコメントごとに変更RemoveXColumnFromY-移行が実際に行っていることをより明確にします。

于 2013-04-06T08:24:33.240 に答える
9

テーブルから列を削除するには、次の移行を実行する必要があります。

rails g migration remove_column_name_from_table_name column_name:data_type

次に、コマンドを実行します。

rake db:migrate
于 2017-08-17T11:15:13.177 に答える
5

以下のコマンドを実行すると、独自に移行ファイルが追加されます

rails g migration RemoveColumnFromModel

上記のコマンドを実行した後、移行ファイルのremove_columnコードを独自に追加する必要があることを確認できます

次に、データベースを移行します

rake db:migrate
于 2014-02-12T03:06:53.510 に答える
5

remove_columninchangeメソッドは、テーブルから列を削除するのに役立ちます。

class RemoveColumn < ActiveRecord::Migration
  def change
    remove_column :table_name, :column_name, :data_type
  end
end

完全なリファレンスについては、このリンクにアクセスしてください:http: //guides.rubyonrails.org/active_record_migrations.html

于 2016-04-18T00:37:29.660 に答える
5

次のように簡単な3つのステップでテーブルから列を削除します。

  1. このコマンドを書く

rails g migration remove_column_from_table_name

このコマンドをターミナルで実行した後、この名前とタイムスタンプ(remove_column from_table_name)で作成された1つのファイル。

次に、このファイルに移動します。

  1. あなたが書かなければならないファイルの中に

    remove_column :table_name, :column_name

  2. 最後にコンソールに移動してから

    rake db:migrate

于 2017-04-06T09:23:44.797 に答える
4

Railsコンソールからもう1つ

ActiveRecord::Migration.remove_column(:table_name, :column_name)

于 2019-08-26T08:36:11.943 に答える
3

ステップ1:移行を作成する

  rails g migration remove_column_name_from_table

ステップ2:作成したばかりのファイル移行のコードを変更する

Railsバージョン<3

  def change
    remove_column :table_name, :column_name, :datatype
  end

Railsバージョン>=3

  def change
    remove_column :table_name, :column_name
  end

ステップ3:移行する

rake db:migrate
于 2021-10-28T09:47:25.533 に答える
2

簡単に、あなたは列を削除することができます

remove_column :table_name, :column_name

例えば、

remove_column :posts, :comment
于 2019-01-04T06:16:01.523 に答える
2

まず、次のコマンドを実行して移行ファイルを作成してみてください。

rails g migration RemoveAgeFromUsers age:string

次に、プロジェクトのルートディレクトリで、次のコマンドを実行して移行を実行します。

rails db:migrate
于 2020-01-13T05:31:52.713 に答える
1


remove_column :table_name, :column_name
移行ファイルを介して

次のように入力すると、Railsコンソールで列を直接削除できます。
ActiveRecord::Base.remove_column :table_name, :column_name

于 2017-03-06T18:08:07.613 に答える
1

このようにしてください。

rails g migration RemoveColumnNameFromTables column_name:type

つまりrails g migration RemoveTitleFromPosts title:string

とにかく、ActiveRecordは実行時にデータベース列をキャッシュするため、ダウンタイムについても考慮することをお勧めします。列を削除すると、アプリが再起動するまで例外が発生する可能性があります。

参照:強力な移行

于 2018-09-11T07:08:07.180 に答える
1
  1. モデルで列を無視としてマークします
class MyModel < ApplicationRecord
  self.ignored_columns = ["my_field"]
end
  1. 移行を生成する
$ bin/rails g migration DropMyFieldFromMyModel
  1. 移行を編集する
class DropMyFieldFromMyModel < ActiveRecord::Migration[6.1]
  def change
    safety_assured { remove_column :my_table, :my_field }
  end
end
  1. 移行を実行します
$ bin/rails db:migrate
于 2021-05-08T21:14:43.053 に答える
-1

これをレールコンソールで実行するだけです

ActiveRecord::Base.connection.remove_column("table_name", :column_name, :its_data_type)

また

TableName.find_by_sql(“ALTER TABLE table_name DROP column_name”)
于 2021-08-11T12:03:54.853 に答える