Ruby on Rails の移行でデータベース列の名前を変更するにはどうすればいいですか? 質問する

Ruby on Rails の移行でデータベース列の名前を変更するにはどうすればいいですか? 質問する

列の名前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の代わりに メソッドを生成します。生成されたメソッドは次のとおりです。updownchange

$ > rails g migration ChangeColumnName

次のような移行ファイルが作成されます。

class ChangeColumnName < ActiveRecord::Migration
  def change
    rename_column :table_name, :old_column, :new_column
  end
end

おすすめ記事