Railsの移行を通じてデータベーステーブルの列を削除するための構文は何ですか?
remove_column :table_name, :column_name
例えば:
remove_column :users, :hobby
ユーザーテーブルから趣味の列を削除します。
古いバージョンのRails用
Ruby script/generate migration RemoveFieldNameFromTableName field_name:datatype
レール3以上
Rails generate migration RemoveFieldNameFromTableName field_name:datatype
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に関しては賢くありませんので、このマイグレーションをロールバックすることはできません。
Rails4アプリでは、列を削除するためにもchangeメソッドを使うことができます。 3番目のパラメータはdata_typeで、オプションの4番目ではオプションを指定できます。 ドキュメンテーション の '利用可能な変換'セクションには少し隠れています。
class RemoveFieldFromTableName < ActiveRecord::Migration
def change
remove_column :table_name, :field_name, :data_type, {}
end
end
これを行うには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
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
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のクイックリファレンスガイドも作成しました。
Rails g migration RemoveXColumnFromY column_name:data_type
X =列名
Y =テーブル名
_編集_
コメントに従ってRemoveXColumnToY
をRemoveXColumnFromY
に変更 - 移行が実際に行っていることをより明確にします。
テーブルから列を削除するには、移行後に実行する必要があります。
Rails g migration remove_column_name_from_table_name column_name:data_type
次にコマンドを実行します。
rake db:migrate
列が移行された場合(rake db:migrate
)に列を削除になるように、列を削除するための移行を生成します。この移行がロールバックされている場合は列を追加する必要があります(rake db:rollback
)。
構文は次のとおりです。
remove_column:table_name、:column_name、:type
列を削除します。移行がロールバックされている場合は列を追加しますも削除します。
例:
remove_column :users, :last_name, :string
注: data_type をスキップすると、移行によって列が正常に削除されますが、移行をロールバックするとエラーになります。
それが独自に移行ファイルに追加するコマンドの下に与えてください
Rails g migration RemoveColumnFromModel
上記のコマンドを実行した後、移行ファイルをチェックすることができますremove_columnコードはそれ自身でそこに追加されなければなりません
それからデータベースを移行します。
rake db:migrate
次のような簡単な3ステップでテーブルから列を削除します。
Rails g migration remove_column_from_table_name
この名前とタイムスタンプで作成された1つのファイルを端末で実行した後(remove_column from_table_name)。
それからこのファイルに行きなさい。
ファイル内に書く必要があります
remove_column :table_name, :column_name
最後にコンソールに行き、そしてそれから
rake db:migrate
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
警告:データベースからカラムを削除するとデータが失われます 。続行するには、以下を参照してください。
Rails generate migration remove_fieldname_from_tablename fieldname:string
例:
accepted
テーブルからquotes
列(ブール値)を削除します。Rails g migration RemoveAcceptedFromQuotes accepted:boolean
テーブルにフィールドを追加する移行を生成するための特別な構文ショートカットがあります。
Railsはマイグレーションを生成しますadd_fieldname_to_tablename fieldname:string
# 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 g migration RemoveColumnNameFromTables column_name:type
すなわちRails g migration RemoveTitleFromPosts title:string
とにかく、ActiveRecordは実行時にデータベースの列をキャッシュするので、停止時間についても考慮する必要があります。列を削除すると、アプリケーションが再起動するまで例外が発生する可能性があります。
参照: 強力な移行
スルーremove_column :table_name, :column_name
移行ファイル内の
次のように入力すると、Railsコンソールで列を直接削除できます。ActiveRecord::Base.remove_column :table_name, :column_name
Rails consoleからもう1つ
ActiveRecord::Migration.remove_column(:table_name, :column_name)
簡単に言えば、あなたは列を削除することができます
remove_column :table_name, :column_name
例えば、
remove_column :posts, :comment