web-dev-qa-db-ja.com

Railsの移行を使用して列を削除する方法

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

559
Ethan
remove_column :table_name, :column_name

例えば:

remove_column :users, :hobby

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

826
Nick Hammond

古いバージョンのRails用

Ruby script/generate migration RemoveFieldNameFromTableName field_name:datatype

レール3以上

Rails generate migration RemoveFieldNameFromTableName field_name:datatype
354
prabu

Rails 4が更新されたため、移行で列を削除するための変更方法を使用でき、移行は正常にロールバックされます。 Rails 3アプリケーションに関する次の警告を読んでください。

レール3警告

このコマンドを使用するときに注意してください。

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に関しては賢くありませんので、このマイグレーションをロールバックすることはできません。

111
Powers

Rails4アプリでは、列を削除するためにもchangeメソッドを使うことができます。 3番目のパラメータはdata_typeで、オプションの4番目ではオプションを指定できます。 ドキュメンテーション の '利用可能な変換'セクションには少し隠れています。

class RemoveFieldFromTableName < ActiveRecord::Migration
  def change
    remove_column :table_name, :field_name, :data_type, {}
  end
end
34

これを行うには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

21
superluminary

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
13
aschmid

Rails 5 Appの列を削除する

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

また、 here にあるRailsのクイックリファレンスガイドも作成しました。

11
Xinyang Li
Rails g migration RemoveXColumnFromY column_name:data_type

X =列名
Y =テーブル名

_編集_

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

10
eden

あなたは以下を試すことができます:

remove_column :table_name, :column_name

公式文書

10
Jordan Running

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

Rails g migration remove_column_name_from_table_name column_name:data_type

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

rake db:migrate
7
Koresol

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

構文は次のとおりです。

remove_column:table_name、:column_name、:type

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

例:

remove_column :users, :last_name, :string

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

6
Imran

それが独自に移行ファイルに追加するコマンドの下に与えてください

Rails g migration RemoveColumnFromModel

上記のコマンドを実行した後、移行ファイルをチェックすることができますremove_columnコードはそれ自身でそこに追加されなければなりません

それからデータベースを移行します。

rake db:migrate
5
prash

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

  1. このコマンドを書く

Rails g migration remove_column_from_table_name

この名前とタイムスタンプで作成された1つのファイルを端末で実行した後(remove_column from_table_name)。

それからこのファイルに行きなさい。

  1. ファイル内に書く必要があります

    remove_column :table_name, :column_name

  2. 最後にコンソールに行き、そしてそれから

    rake db:migrate

5
Karan Bamniya

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

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

完全な参照のためにこのリンクに行きなさい: http://guides.rubyonrails.org/active_record_migrations.html

4
Dharmesh Rupani

レール5.2のための明確で簡単な指示

警告:データベースからカラムを削除するとデータが失われます 。続行するには、以下を参照してください。


1.移行を作成する

  • 端末で 次のコマンドを実行します。

Rails generate migration remove_fieldname_from_tablename fieldname:string

  • 注意:テーブル名はRailsの規約に従って複数形にする必要があります。

例:

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

Rails g migration RemoveAcceptedFromQuotes accepted:boolean

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

Railsはマイグレーションを生成しますadd_fieldname_to_tablename fieldname:string

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

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

4
BKSpurgeon

これが好きですか。

Rails g migration RemoveColumnNameFromTables column_name:type

すなわちRails g migration RemoveTitleFromPosts title:string

とにかく、ActiveRecordは実行時にデータベースの列をキャッシュするので、停止時間についても考慮する必要があります。列を削除すると、アプリケーションが再起動するまで例外が発生する可能性があります。

参照: 強力な移行

1
Nuttapon

スルー
remove_column :table_name, :column_name
移行ファイル内の

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

0
Manh Cuong

Rails consoleからもう1つ

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

0
TD-Rails

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

remove_column :table_name, :column_name

例えば、

remove_column :posts, :comment
0
Foram Thakral