回答:
remove_column :table_name, :column_name
例えば:
remove_column :users, :hobby
ユーザーテーブルから趣味の列を削除します。
remove_column :table_name, :column_name, :type, :options
、change
メソッド内でも使用できます。ドキュメントから:ザ・type
及びoptions
パラメータが存在する場合、無視されます。移行のchange
メソッドでこれらを提供すると、元に戻すことができるので便利です。その場合、type
及びoptions
ADD_COLUMNによって使用されるであろう。
change
メソッドで列を削除できますが、列タイプを指定した場合のみです。例えばremove_column, :table_name, :column_name, :column_type
。移行を実行しようとしたときそうしないと、次のエラーを取得します:remove_column is only reversible if given a type
古いバージョンのRailsの場合
ruby script/generate migration RemoveFieldNameFromTableName field_name:datatype
Rails 3以降の場合
rails generate migration RemoveFieldNameFromTableName field_name:datatype
rails g migration remove_field_name_from_table_name field_name:datatype
また動作します
AddXXXtoTTT
RemoveXXXFromTTT
rails g migration RemoveUnusefulFieldsFromUsers hair_color:string favorite_number:integer
remove_column
change
up
down
change
しているようです。ロールバックは正常に機能します。
change
ことができるメソッドを使用している場合*、データ型(および他のすべてのフィールド修飾子)に通知する必要があるため、その移行をロールバックすると、フィールドを正しく再作成できると思います。*元に戻すと言うと、それはもちろんデータベース構造の観点からです。もちろん、その列のデータは失われます。
Rails 4が更新されたため、変更メソッドを移行で使用して列を削除でき、移行は正常にロールバックされます。Rails 3アプリケーションについては、次の警告をお読みください。
Rails 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の変更方法は、remove_columnに関してはスマートではないため、この移行をロールバックすることはできません。
change
メソッドを使用すると、rake db:rollback
コマンドはエラーになります。 rake db:rollback
基本的にの反対ですrake db:migrate
。このバグはRails 4で修正されました:)
これを行うには、2つの良い方法があります。
次のように、単にremove_columnを使用できます。
remove_column :users, :first_name
スキーマに1つの変更を加えるだけでよい場合は、これで問題ありません。
次のように、change_tableブロックを使用してこれを行うこともできます。
change_table :users do |t|
t.remove :first_name
end
読みやすく、一度に複数の変更を加えることができるので、私はこれを好みます。
サポートされているchange_tableメソッドの完全なリストは次のとおりです。
http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table
移行を生成して列を削除し、それが移行(rake db:migrate
)された場合、列をドロップするようにします。そして、この移行がロールバックされた場合、列を追加する必要があります(rake db:rollback
)。
構文:
remove_column:table_name、:column_name、:type
列を削除し、移行がロールバックされた場合に列を追加します。
例:
remove_column :users, :last_name, :string
注:data_typeをスキップすると、移行によって列が正常に削除されますが、移行をロールバックするとエラーがスローされます。
端末で次のコマンドを実行します。
rails generate migration remove_fieldname_from_tablename fieldname:fieldtype
注:テーブル名は、レールの規則に従って複数形にする必要があります。
例:
私の場合accepted
、quotes
テーブルから列(ブール値)を削除します。
rails g migration RemoveAcceptedFromQuotes accepted:boolean
ドキュメントを参照してください:テーブルにフィールドを追加/削除するときの規則:
テーブルにフィールドを追加する移行を生成するための特別な構文ショートカットがあります。
railsはマイグレーションadd_fieldname_to_tablename fieldname:fieldtypeを生成します
# 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
rake db:migrate
....そして、あなたはレースに出かけます!
rails db:migrate
RAILS 5アプリの列を削除する
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 g migration RemoveXColumnFromY column_name:data_type
X =列名
Y =テーブル名
編集
変更RemoveXColumnToY
にRemoveXColumnFromY
コメント通り-移行が実際にやっていることのためのより多くの明快さを提供します。
remove_column
change
方法テーブルから列を削除するのに役立ちます。
class RemoveColumn < ActiveRecord::Migration
def change
remove_column :table_name, :column_name, :data_type
end
end
完全な参照については、このリンクにアクセスしてください:http : //guides.rubyonrails.org/active_record_migrations.html
up
でdown
はなくメソッド内でこれを実行change
してください。