0

初め

ruby script/generate model Buyer id:integer name:string 

バイヤーモデルを生成した後、私はやった

rake db:migrate

それはうまくいきました。

1日後、以下のコマンドを実行しました

ruby script/generate model Seller id:integer seller_name:string

売り手モデルを生成した後、私はやった

rake db:migrate

Buyer テーブルが既に存在するというエラーが表示されました。なぜ?異なるタイムスタンプ ファイルがあります。

class CreateBuyer < ActiveRecord::Migration
  def self.up
    create_table :buyer do |t|
      t.string :name
      t.text :description
      t.decimal :price
      t.integer :seller_id
      t.string :email
      t.string :img_url

      t.timestamps
    end
  end

  def self.down
    drop_table :ads
  end
end

そしてもう一つは

class CreateSellers < ActiveRecord::Migration
  def self.up
    create_table :sellers do |t|
      t.integer :nos
      t.decimal :tsv
      t.decimal :avg_price

      t.timestamps
    end
  end

  def self.down
    drop_table :sellers
  end
end

Rails 2.3.11 と rake 0.8.7 を使用しました

4

1 に答える 1

1

最初の移行を実行したときにエラーが生成されなかったことを確認しますか?移行の実行中にエラーが発生した場合、すでに実行されているパーツは引き続きデータベースに残りますがschema_migrations、移行のタイムスタンプで更新されません。したがって、次に移行を実行しようとすると、失敗した移行の最初の部分を再実行しようとします。これにより、すでに実行されているため、エラーが発生します。

更新:追加したエラー出力を見ると(ちなみに、コメントではなく質問に追加してください。フォーマットされ、すべてが含まれています)、最初の出力Execute db:migrateが移行を実行していることがわかりますCreateBuyer。これは、移行が最初に実行されたときに完了しなかったか、その後ロールバックに失敗したことを確認します。これを修正するには、buyerテーブルを手動で削除してから、移行を再実行します。

CreateBuyers注意として、移行には少なくとも2つの問題があります。

  1. テーブル名は(単数buyers)ではなく(複数)にする必要がありますbuyer
  2. 移行の一部は、代わりにdownテーブルを削除することですadsbuyers

そこでの2番目の問題は、実際に移行の実行に問題がある理由を説明している可能性があります。CreateBuyers移行をロールバックした場合、adsテーブルが削除buyersされ、そのまま残ります。

于 2011-08-23T23:04:11.563 に答える