列の名前hased_password
を ではなく と間違って付けてしまいましたhashed_password
。
移行を使用してこの列の名前を変更し、データベース スキーマを更新するにはどうすればよいですか?
ベストアンサー1
rename_column :table, :old_column, :new_column
おそらく、これを行うには別の移行を作成する必要があります。(FixColumnName
必要に応じて名前を変更してください。):
bin/rails generate migration FixColumnName
# creates db/migrate/xxxxxxxxxx_fix_column_name.rb
次に、移行を編集して、希望どおりに実行します。
# db/migrate/xxxxxxxxxx_fix_column_name.rb
class FixColumnName < ActiveRecord::Migration
def self.up
rename_column :table_name, :old_column, :new_column
end
def self.down
# rename back if you need or do something else or do nothing
end
end
Rails 3.1の場合は以下を使用します。
up
およびメソッドは引き続き適用されますがdown
、Rails 3.1 では、change
「データベースを移行する方法と、移行がロールバックされたときに別の down メソッドを記述せずにそれを元に戻す方法を認識する」メソッドが提供されます。
見る "アクティブレコードの移行" 詳細については。
rails g migration FixColumnName
class FixColumnName < ActiveRecord::Migration
def change
rename_column :table_name, :old_column, :new_column
end
end
名前を変更する列が多数ある場合、またはテーブル名を何度も繰り返す必要がある場合は、次のようにします。
rename_column :table_name, :old_column1, :new_column1
rename_column :table_name, :old_column2, :new_column2
...
change_table
物事をもう少し整理するために、次のものを使用できます。
class FixColumnNames < ActiveRecord::Migration
def change
change_table :table_name do |t|
t.rename :old_column1, :new_column1
t.rename :old_column2, :new_column2
...
end
end
end
その後はdb:migrate
いつも通り、あるいは自分の仕事を続けてください。
Rails 4の場合:
Migration
列の名前を変更するためのを作成する際、Rails 4 は、上記のセクションで説明したように、とchange
の代わりに メソッドを生成します。生成されたメソッドは次のとおりです。up
down
change
$ > rails g migration ChangeColumnName
次のような移行ファイルが作成されます。
class ChangeColumnName < ActiveRecord::Migration
def change
rename_column :table_name, :old_column, :new_column
end
end