Heroku 没有将符号隐式转换为整数错误

Heroku no implicit conversion of Symbol into Integer Error

我收到以下错误:heroku run rake db:migrate

Migrating to CreateResults (20150306174427)
== 20150306174427 CreateResults: migrating ====================================
-- create_table(:results)
   -> 0.0479s
-- add_foreign_key(:results, :quantifieds, :users)
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

no implicit conversion of Symbol into Integer/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.2.0.rc3/lib/active_record/connection_adapters/abstract/schema_statements.rb:707:in `[]'
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.2.0.rc3/lib/active_record/connection_adapters/abstract/schema_statements.rb:707:in `add_foreign_key'

我无法理解,因为 run rake db:migrate 有效。

class CreateResults < ActiveRecord::Migration
  def change
    create_table :results do |t|
      t.string :result_value
      t.date :date_value
      t.belongs_to :quantified, index: true
      t.references :user, index: true

      t.timestamps null: false
    end
    add_foreign_key :results, :quantifieds, :users
    add_index :results, [:user_id, :created_at]
  end
end

class CreateQuantifieds < ActiveRecord::Migration
  def change
    create_table :quantifieds do |t|
      t.string :categories
      t.string :metric
      t.references :user, index: true

      t.timestamps null: false
    end
    add_foreign_key :quantifieds, :users
    add_index :quantifieds, [:user_id, :created_at]
  end
end

# encoding: UTF-8
# This file is auto-generated from the current state of the database. Instead
# of editing this file, please use the migrations feature of Active Record to
# incrementally modify your database, and then regenerate this schema definition.
#
# Note that this schema.rb definition is the authoritative source for your
# database schema. If you need to create the application database on another
# system, you should be using db:schema:load, not running all the migrations
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
# you'll amass, the slower it'll run and the greater likelihood for issues).
#
# It's strongly recommended that you check this file into your version control system.

ActiveRecord::Schema.define(version: 20150306174427) do

  create_table "days", force: true do |t|
    t.integer  "level_id"
    t.integer  "habit_id"
    t.boolean  "missed",     default: false
    t.datetime "created_at",                 null: false
    t.datetime "updated_at",                 null: false
  end

  create_table "goals", force: true do |t|
    t.string   "name"
    t.date     "deadline"
    t.boolean  "accomplished"
    t.integer  "user_id"
    t.datetime "created_at",   null: false
    t.datetime "updated_at",   null: false
  end

  add_index "goals", ["user_id", "created_at"], name: "index_goals_on_user_id_and_created_at"
  add_index "goals", ["user_id"], name: "index_goals_on_user_id"

  create_table "habits", force: true do |t|
    t.datetime "left"
    t.integer  "level"
    t.text     "committed"
    t.datetime "date_started"
    t.string   "trigger"
    t.string   "target"
    t.string   "reward"
    t.integer  "user_id"
    t.datetime "created_at",   null: false
    t.datetime "updated_at",   null: false
  end

  add_index "habits", ["user_id", "created_at"], name: "index_habits_on_user_id_and_created_at"
  add_index "habits", ["user_id"], name: "index_habits_on_user_id"

  create_table "levels", force: true do |t|
    t.integer  "user_id"
    t.integer  "habit_id"
    t.integer  "days_needed"
    t.boolean  "passed",      default: false
    t.datetime "created_at",                  null: false
    t.datetime "updated_at",                  null: false
  end

  create_table "quantifieds", force: true do |t|
    t.string   "categories"
    t.string   "metric"
    t.integer  "user_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  add_index "quantifieds", ["user_id", "created_at"], name: "index_quantifieds_on_user_id_and_created_at"
  add_index "quantifieds", ["user_id"], name: "index_quantifieds_on_user_id"

  create_table "relationships", force: true do |t|
    t.integer  "follower_id"
    t.integer  "followed_id"
    t.datetime "created_at",  null: false
    t.datetime "updated_at",  null: false
  end

  add_index "relationships", ["followed_id"], name: "index_relationships_on_followed_id"
  add_index "relationships", ["follower_id", "followed_id"], name: "index_relationships_on_follower_id_and_followed_id", unique: true
  add_index "relationships", ["follower_id"], name: "index_relationships_on_follower_id"

  create_table "results", force: true do |t|
    t.string   "result_value"
    t.date     "date_value"
    t.integer  "quantified_id"
    t.integer  "user_id"
    t.datetime "created_at",    null: false
    t.datetime "updated_at",    null: false
  end

  add_index "results", ["quantified_id"], name: "index_results_on_quantified_id"
  add_index "results", ["user_id", "created_at"], name: "index_results_on_user_id_and_created_at"
  add_index "results", ["user_id"], name: "index_results_on_user_id"

  create_table "taggings", force: true do |t|
    t.integer  "tag_id"
    t.integer  "taggable_id"
    t.string   "taggable_type"
    t.integer  "tagger_id"
    t.string   "tagger_type"
    t.string   "context",       limit: 128
    t.datetime "created_at"
  end

  add_index "taggings", ["tag_id", "taggable_id", "taggable_type", "context", "tagger_id", "tagger_type"], name: "taggings_idx", unique: true
  add_index "taggings", ["taggable_id", "taggable_type", "context"], name: "index_taggings_on_taggable_id_and_taggable_type_and_context"

  create_table "tags", force: true do |t|
    t.string  "name"
    t.integer "taggings_count", default: 0
  end

  add_index "tags", ["name"], name: "index_tags_on_name", unique: true

  create_table "users", force: true do |t|
    t.string   "name"
    t.string   "email"
    t.text     "missed_days"
    t.text     "missed_levels"
    t.datetime "created_at",                        null: false
    t.datetime "updated_at",                        null: false
    t.string   "password_digest"
    t.string   "remember_digest"
    t.boolean  "admin",             default: false
    t.string   "activation_digest"
    t.boolean  "activated",         default: false
    t.datetime "activated_at"
    t.string   "reset_digest"
    t.datetime "reset_sent_at"
  end

  add_index "users", ["email"], name: "index_users_on_email", unique: true

  create_table "valuations", force: true do |t|
    t.string   "name"
    t.integer  "user_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  add_index "valuations", ["user_id", "created_at"], name: "index_valuations_on_user_id_and_created_at"
  add_index "valuations", ["user_id"], name: "index_valuations_on_user_id"

end

更新

使这些更改生效:

$ heroku pg:reset DATABASE
$ heroku rake db:migrate

class CreateResults < ActiveRecord::Migration
  def change
    create_table :results do |t|
      t.string :result_value
      t.date :date_value
      t.integer :quantified_id

      t.timestamps null: false
    end
  end
end

非常感谢您的帮助! 对于另一个令人困惑的问题,请查看:

t.belongs_to

无效,您需要 references 或将其更改为 integer 并在字段名称中添加 _id。然后在您的索引上,在第二个和第三个参数周围添加方括号。