Rails ActiveRecord Migration在成功迁移后不创建一些列

时间:2016-11-18 04:08:27

标签: ruby-on-rails ruby activerecord ruby-on-rails-5 rails-migrations

我在游戏中创建了一个新模型,包括主队和客队。 如果我运行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

1 个答案:

答案 0 :(得分:0)

rake db:reset不会为您运行最新的迁移。它将运行db:dropdb:setupdb:setup本身会运行db:schema:loaddb:seed

因此,在运行db:reset时,它会删除数据库,从模式中再次创建数据库,并使用种子数据初始化数据库。它不会运行任何挂起的迁移。

执行db:reset后,您需要运行db:migrate以应用待处理的迁移。成功迁移将为您更新架构,以便下次运行db:setupdb:reset时,将自动应用这些迁移。

如果您之前运行过db:migrate,那么他们可能会失败并将您的schema.rb留在“腐败”状态。州。您可能希望尝试将架构回滚到先前版本并重新运行迁移,以确保您没有收到任何错误。

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