0

スキーマ内のテーブルにいくつかの列を追加する必要があります。誰かがこれを行うための最良の方法を教えてもらえますか?

schema.rb ファイルが新しい列を含むように更新されておらず、対応するすべてのビュー ファイル (edit、index、new、show) が新しい列を含むように更新されていないため、以下は不完全または間違っているようです。生成されるすべての移行クラスの肥大化は言うまでもありません。ありがとう

ruby script/generate migration RecordLabelToAlbums record_label:string
      exists  db/migrate
      create  db/migrate/20121130125859_record_label_to_albums.rb

これを作成します:

class RecordLabelToAlbums < ActiveRecord::Migration
def self.up
end

def self.down
 end
end

次にこれを追加しました:

class RecordLabelToAlbums < ActiveRecord::Migration
def self.up
   add_column :albums, :record_label, :text
end

def self.down
   remove_column :albums, :record_label
end

end

私が走った:

rake db:migrate

これを取得しました: Mysql::Error: テーブル 'albums' は既に存在します: CREATE TABLE albums( idint(11) DEFAULT NULL auto_increment PRIMARY KEY, created_atdatetime, updated_atdatetime)

4

1 に答える 1

1

追加したコードは正しいです。

このエラーは、何らかの理由で、アルバム テーブルを作成した元の移行がまだ実行されていないとシステムが認識しているように見えることを示しています。(Rails 2 での) 移行の状態は、データベース内のテーブルで指定されます。schema_migrationsこれが混乱すると、移行を再実行しようとします。何が混乱の原因なのかはわかりませんが、Rails 2.x を使用していた 2008 年に何度かこのようなことがあったことを覚えています。

表は単純です -- SQL プロンプトからその内容を確認できます -- 実行されたと思われる移行の名前だけだと思います。

一部のデータが失われても構わない場合は、最初に戻る ことを試みることrake db:rollbackもできます。最後の 2 つの移行をロールバックします。rake db:resetrake db:rollback STEP=2

app/db/migrationsデータが必要な場合は、欠落している可能性のある移行を参照する 1 つ以上の新しいレコードを追加して、テーブルの内容を修正します。順序は重要だと思います (Rails 3 で形式が少し変更されました。方法は覚えていません)。

データベース スキーマを追加または変更する必要があるときはいつでも、レールを使用して移行を生成し、rake db:migrate準備が整ったら実行します。

Rails 3 に移行する方法はありますか?ヒットしてアップグレードしないと、非互換性、非推奨、セキュリティおよびパフォーマンスの問題などの逆境に陥ることになります。

于 2012-11-30T14:17:27.047 に答える