1. ホーム
  2. ruby-on-rails

[解決済み] Ruby on Railsのマイグレーションでデータベースのカラムの名前を変更するにはどうすればよいですか?

2022-03-18 15:55:31

質問内容

カラムの名前を間違えてしまいました hased_password ではなく hashed_password .

このカラムの名前を変更するために、マイグレーションを使用して、データベーススキーマをどのように更新すればよいですか?

解決方法は?

rename_column :table, :old_column, :new_column

これを行うには、おそらく別のマイグレーションを作成することになるでしょう。(リネーム FixColumnName を使用します)。

script/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の場合、使用します。

一方 updown メソッドはまだ適用されますが、Rails 3.1では change メソッドは、"データベースをマイグレートする方法を知っており、マイグレーションがロールバックされたときに、別途ダウンメソッドを書く必要なくそれを元に戻すことができます"。

"をご覧ください。 アクティブレコードマイグレーション "でご確認ください。

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 メソッドの代わりに updown で述べたとおりです。生成された change というメソッドがあります。

$ > rails g migration ChangeColumnName

というようなマイグレーションファイルが作成されます。

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