私は名前付けがひどく、私のRailsアプリにはモデルのより良い名前のセットがあることに気付きます。
移行を使用してモデルとそれに対応するテーブルの名前を変更する方法はありますか?
以下に例を示します。
class RenameOldTableToNewTable < ActiveRecord::Migration
def self.up
rename_table :old_table_name, :new_table_name
end
def self.down
rename_table :new_table_name, :old_table_name
end
end
モデル宣言ファイルの名前を手動で変更する必要がありました。
編集:
Rails 3.1&4では、ActiveRecord::Migration::CommandRecorder
はrename_tableの移行を逆にする方法を知っているので、これを行うことができます。
class RenameOldTableToNewTable < ActiveRecord::Migration
def change
rename_table :old_table_name, :new_table_name
end
end
(まだ、手動でファイル名を変更する必要があります。)
Rails 4では、defを変更するだけでした。
def change
rename_table :old_table_name, :new_table_name
end
そして、私のすべてのインデックスは私のために世話をされました。古いインデックスを削除して新しいインデックスを追加することにより、手動でインデックスを更新する必要はありませんでした。
また、インデックスに関しても上下に変更を使用して機能します。
他の回答とコメントでは、テーブルの名前変更、ファイルの名前変更、コード全体のgrepについて説明しました。
さらにいくつかの警告を追加したいと思います。
今日私が直面した実世界の例を使用してみましょう。「商人」から「ビジネス」にモデルの名前を変更します。
また、インデックスを置き換える必要があります。
class RenameOldTableToNewTable< ActiveRecord:Migration
def self.up
remove_index :old_table_name, :column_name
rename_table :old_table_name, :new_table_name
add_index :new_table_name, :column_name
end
def self.down
remove_index :new_table_name, :column_name
rename_table :new_table_name, :old_table_name
add_index :old_table_name, :column_name
end
end
ここで他の答えが説明するように、手動でファイルなどの名前を変更します。
参照: http://api.rubyonrails.org/classes/ActiveRecord/Migration.html
この移行を記述した後、ロールバックおよびロールフォワードできることを確認してください。何か問題が発生し、存在しなくなったものに影響を与えようとする移行に取り付かれると、注意が必要になります。データベース全体を破棄して、ロールバックできない場合は再度開始することをお勧めします。したがって、何かをバックアップする必要がある場合があることに注意してください。
また、has_またはbelongs_toなどによって定義された他のテーブルの関連する列名についてschema_dbを確認します。おそらくこれらも編集する必要があります。
そして最後に、回帰テストスイートなしでこれを行うのは簡単です。