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处于“损坏”状态。您可能想尝试将您的模式回滚到以前的版本并重新运行迁移以确保您没有收到任何错误。

请注意,这不是一个解决方案,而是一个漫长的评论。