1

我從遊戲創建一個新模型,主隊和客隊。 如果我運行rake db:reset,它運行時沒有錯誤,但前三個字段(home_team,away_team和league)不會在數據庫中生成,其他字段都可以。 這是我的遷移:Rails ActiveRecord遷移成功遷移後不創建一些列

這裏是schema.rb產生

 create_table "games", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| 
     t.integer "round" 
     t.datetime "date" 
     t.datetime "created_at", null: false 
     t.datetime "updated_at", null: false 
     end 

但是,最怪異的是,我有事務的另一個遷移,並能正常工作:

class CreateTransactions < ActiveRecord::Migration[5.0] 
     def change 
     create_table :transactions do |t| 
      t.references :from_user, references: :users, foreign_key: true, index: true 
      t.references :to_user, references: :users, foreign_key: true, index: true 
      t.decimal :amount   

      t.timestamps 
     end 
     end 
    end 
+3

您應該已經使用'rake db:migrate' –

+0

可能表'teams'不存在。儘量避免使用'references',而只是使用't.integer'。 –

+0

查看['add_reference'](http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-add_reference)的文檔,感覺像'references'不在乎關於'references::teams'選項。你能指點我的文件,你正在跟隨? – spickermann

回答

0

rake db:reset將不會爲您運行最新的遷移。它將運行db:dropdb:setup。然後db:setup本身運行db:schema:loaddb:seed

因此,在運行db:reset時,它會刪除數據庫,再次從模式創建數據庫,並使用種子數據初始化數據庫。它不會運行任何掛起的遷移。

做完db:reset之後,您需要運行db:migrate來應用待定遷移。成功的遷移將爲您更新模式,以便下次運行db:setupdb:reset時,將自動應用這些遷移。

如果您以前運行過db:migrate,它們可能失敗並且使schema.rb處於「損壞」狀態。您可能想嘗試將您的模式回滾到以前的版本並重新運行遷移以確保您沒有收到任何錯誤。

請注意,這不是一個解決方案,而是一個漫長的評論。