私は git ブランチにいて、ブランチを破棄する前に 2 つの移行をロールバックしようとしています。最新の移行では、保持したいテーブルに列が追加されます (これはマスターの一部であり、削除されるブランチではありません)。そのため、テーブル全体を削除することは解決策ではありません (再作成する必要がない限り)。とにかく、スコアテーブルからapple_id列を削除しようとしたときに、この中止エラーが発生したため、何か間違ったことをしたに違いありません.
これは、ロールバックしようとしている移行です
add_column :scores, :apple_id, :integer
ただし、エラー メッセージ (以下を参照) は、テーブルを作成した元の移行 (マスター ブランチの一部) で作成したインデックスを参照しています。
add_index :scores, [:user_id, :created_at, :funded, :started]
私ができることを提案できますか?
== AddAppleidColumnToScores: reverting =======================================
-- remove_column("scores", :apple_id)
rake aborted!
An error has occurred, this and all later migrations canceled:
Index name 'temp_index_altered_scores_on_user_id_and_created_at_and_funded_and_started' on table 'altered_scores' is too long; the limit is 64 characters
更新: この SO の質問を読むMySQL を使用した Ruby on Rails 移行で長すぎるインデックス名を処理するにはどうすればよいですか? 、問題の原因についてさらに情報を得ましたが、解決方法がわかりません。SQL と Postgres の両方に 64 文字の制限があります
Index name 'index_studies_on_user_id_and_university_id_and_subject_\
name_id_and_subject_type_id' on table 'studies' is too long; \
the limit is 64 characters
私が参照している質問に対する受け入れられた回答は、インデックスに名前を付けるように言っていますが、ロールバックしようとしている今、これをどのように行うことができるかわかりません。
add_index :studies, ["user_id", "university_id", \
"subject_name_id", "subject_type_id"],
:unique => true, :name => 'my_index'
更新: コメントに応えて、Rails 3.2.12 を使用しています。これは、列を追加する移行です
class AddAppleidColumnToScores < ActiveRecord::Migration
def change
add_column :scores, :apple_id, :integer
end
end
さらに、テーブルを削除したくなかったのは、a) メイン パーツはブランチ マスターに作成され、列はブランチに追加され、b)削除されたテーブルの移行ファイルをどうすればよいかわかりませんでした。これは私が作成した (約 10 個の) 4 番目のテーブルだったので、実行方法がわかりません。