2011-08-23 122 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」 –

相關問題