2011-08-23 125 views
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 

我得到了一个错误,那买家表已经存在。为什么?我们有不同的时间戳文件。

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耙0.8.7

+0

您可以添加您的迁移文件,以便我们可以看到代码? – Solomon

+0

您不需要在迁移中添加id字段,它们会自动添加。 –

+0

@Solomon - 我粘贴代码 –

回答

1

你肯定有没有产生错误时,你遇到的第一个迁移?如果在运行迁移时遇到错误,那么已经运行的部分仍将位于数据库中,但schema_migrations将不会使用迁移时间戳进行更新。因此,下次尝试运行迁移时,它会尝试重新运行失败迁移的第一部分,由于它已经运行,将会生成错误。

更新:如果您在您添加的错误输出看看(顺便说一下,请添加到这个问题,而不是评论,所以它的格式,并包括整个事情),你可以看到第一个Execute db:migrate是运行迁移CreateBuyer。这证实您的迁移在您第一次运行或未成功回滚时未完成。要解决此问题,请手动删除buyer表,然后重新运行您的迁移。

作为一个说明,我们在您的CreateBuyers迁移至少几个问题:

  1. 表名称应该是buyers(复数),而不是buyer(单数)
  2. down迁移的一部分删除表ads而不是buyers

第二个问题可以解释为什么您在运行迁移时遇到问题否实际上,如果您回滚了CreateBuyers迁移,它将删除您的ads表并将buyers留在原地。

+0

我粘贴代码,这里是我的错误跟踪 耙分贝:迁移--trace **调用分贝:迁移(FIRST_TIME) **调用环境(FIRST_TIME) **执行环境 **执行分贝:迁移 == CreateBuyer:migrating ==================== - create_table(:buyer) rake中止! 发生错误,已取消此以及所有后来的迁移: SQLite3 :: SQLException:表“Buyer”已存在:CREATE TABLE“Buyer”(“id”INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,“name”varchar(255) ,“描述”文本,“价格”小数,“seller_id”整数,“email”varchar(255),“img_url” –

相关问题