2017-05-09 48 views
0

我在我的Rails應用程序中創建了一個名爲Categorie的模型。 由於出錯,我需要刪除模型。Rails:耙由於已經存在的表而中止,但無法刪除它

我跑

rails d model Categorie 

可以除去我現有的模型。

我忘了在那一刻運行rails g migration DropTable

但後來,我需要重新創建Categorie模型,所以我跑:

rails g model Categorie name:string 

可是當我要運行rake db:migrate我得到以下錯誤:

rake aborted! 
StandardError: An error has occurred, all later migrations canceled: 

Mysql2::Error: Table 'categories' already exists: CREATE TABLE `categories` ... 

之後,我試圖刪除表重做所有的過程,但它不工作,表仍然在schema.rb

我知道不建議手動從這就是爲什麼我想知道是否有人會知道這件事的文件。我知道這是一個白癡的錯誤,但現在我不知道如何解決這個問題。

下面是我試圖刪除該表:

rails g migration DropCategories 

def change 
    drop_table :categories 
end 

rake db:migrate 

我認爲這是與刪除表,因爲這裏是輸出端的問題,當我遷移數據庫:

== 20170509123739 CreateCategories: migrating ================================= 
-- create_table(:categories) 
rake aborted! 
StandardError: An error has occurred, all later migrations canceled: 

Mysql2::Error: Table 'categories' already exists: CREATE TABLE `categories` (`id` int(11) auto_increment PRIMARY KEY, `name` varchar(255), `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL) ENGINE=InnoDB 

Rails似乎創建一個表,而不是刪除我想要的。

+0

你是怎樣嘗試刪除該表?錯誤消息正在發生,因爲該表仍在MySQL數據庫中,而不是因爲它在'schema.rb'中。如果您使用MySQL客戶端刪除表,那麼無論「schema.rb」中的內容如何,​​您的遷移都應該成功。 – Brian

+0

@Brian我做了rails g遷移DropCategories,然後我用drop_table修改了遷移文件:類別 – justinedps26

+0

您可以嘗試回滾(rake db:rollback),然後更改遷移文件,以便只有一個文件創建表。 N.B:回滾將模式回滾到以前的版本。 –

回答

0

你可以簡單地刪除該表,如果它在你的新的遷移存在:

def change 
    reversible do |dir| 
    dir.up do 
     drop_table :categories if table_exists? :categories # pre rails 5 
     drop_table :categories, if_exists: true # rails 5 and onwards 
    end 
    end 

    # put the rest of your migration here: 
    create_table :categories do |t| 
    t.string :name 

    t.timestamps 
    end 
end 

reversible位確保正常運行遷移時自定義表刪除代碼只執行,只要你做的就是忽略一個rollback

+0

我已經完成了一些更容易的事情。我爲Mac使用了一個名爲SequelPro的MySql客戶端。我已經刪除了它的表,並知道一切正常完美!無論如何感謝您的貢獻! – justinedps26

+0

您的問題與如何解決此問題有關,而無需手動執行。你剛剛完成與你正在尋找的東西完全相反的東西。我的答案仍然存在,並會爲你工作。 – Jon

+0

我沒有這樣說過。我只是想要一種解決我的問題的方法,即以任何方式從我的數據庫中刪除表格!但是,謝謝你的回答,我確信這將有助於別人,甚至有一天! – justinedps26

0

按照以下步驟來解決該問題

  1. 在遷移文件註釋中的 '變' 法

    def change 
        create_table :categories do |t| 
        #t.string :name 
        #t.timestamps 
        end 
    end 
    
  2. 運行耙分貝代碼:遷移命令

  3. 取消註釋'change'方法中的代碼

    def ch ange create_table:categories do | t | t.string:名稱 t。時間戳 結束

  4. 現在運行耙分貝:遷移

  5. 現在你的遷移得到恢復正常,你可以繼續你需要什麼

相關問題