我在游戏中创建了一个新模型,包括主队和客队。 如果我运行rake db:reset,它运行没有错误,但前三个字段(home_team,away_team和league)在数据库中没有生成,其他字段都可以。 这是我的迁移:
class CreateGames < ActiveRecord::Migration[5.0]
def change
create_table :games do |t|
t.references :home_team, references: :teams, foreign_key: true, index: true
t.references :away_team, references: :teams, foreign_key: true, index: true
t.belongs_to :league, foreign_key: true
t.integer :round
t.datetime :date
t.timestamps
end
end
end
这里是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
答案 0 :(得分:0)
rake db:reset
不会为您运行最新的迁移。它将运行db:drop
和db:setup
。 db:setup
本身会运行db:schema:load
和db:seed
。
因此,在运行db:reset
时,它会删除数据库,从模式中再次创建数据库,并使用种子数据初始化数据库。它不会运行任何挂起的迁移。
执行db:reset
后,您需要运行db:migrate
以应用待处理的迁移。成功迁移将为您更新架构,以便下次运行db:setup
或db:reset
时,将自动应用这些迁移。
如果您之前运行过db:migrate
,那么他们可能会失败并将您的schema.rb留在“腐败”状态。州。您可能希望尝试将架构回滚到先前版本并重新运行迁移,以确保您没有收到任何错误。
请注意,这不是一个解决方案,而是一个冗长的评论。