1

Я создаю новую модель из игры с домашней командой и командой гостей. Если я запускаю rake db: reset, он запускается без ошибок, но первые три поля (home_team, away_team и лига) не генерируются в базе данных, другие поля в порядке. Это мой мигрирует: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' не существует. Старайтесь избегать использования 'ссылок' и просто используйте' t.integer' вместо этого. –

+0

Глядя на документацию ['add_reference'] (http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-add_reference), мне кажется, что« ссылки »не заботятся о опции «ссылки::». Не могли бы вы указать мою документацию, за которой вы следуете? – spickermann

ответ

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 в «поврежденном» состоянии. Вы можете попытаться отменить свою схему до предыдущей версии и перезапустить миграцию, чтобы убедиться, что вы не получаете никаких ошибок.

Примечание. Это не столько решение, сколько длинный комментарий.