1

ホームチームと離れたチームでゲームから新しいモデルを作成しています。 rake db:resetを実行するとエラーなしで実行されますが、最初の3つのフィールド(home_team、away_team、league)はデータベースに生成されず、他のフィールドはokです。私にとって最も奇妙なiは取引のために別の移行を持っているということです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:setupまたはdb:resetを実行すると、自動的に移行が適用されます。

以前にdb:migrateを実行していた場合は、失敗してschema.rbが「破損」状態になっている可能性があります。スキーマを以前のバージョンにロールバックし、移行を再実行してエラーが発生しないようにすることができます。

これはあまり解決策ではありませんが、長いコメントです。

関連する問題