Удалить индекс в ActiveRecord [5.1], заменив model_id на nil - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь удалить ссылочный столбец из моей базы данных, локально используя sqlite3.

Получал SQLite3::ConstraintException: FOREIGN KEY constraint failed: DROP TABLE "features", поэтому я сначала попытался удалить внешний ключ. Это ничего не изменило в моем файле схемы, кроме версии, потому что миграция была успешно выполнена.

Теперь пытаемся

def up
  remove_index :features, column: [:user_id]
end

def down
  add_index :features, column: [:user_id]
end

И это заменяет t.index ["user_id"], name: "index_features_on_user_id" на t.index [nil], name: "index_features_on_user"

Я попытался поиграть с удалением_индекса, чтобы он был просто :user или :user_id в качестве второго параметра, но безуспешно.

Я даже попытался добавить имя и тот же ноль remove_index :features, :user_id, name: :index_features_on_user

В конечном итоге я хочу удалить всю ссылку на пользователя, t.index и t.integer "user_id", но не увенчался успехом, и подумал, что это потому, что там был тот индекс, который отказывался быть удаленным, но я мог ошибаться.

ОБНОВЛЕНИЕ

Вот таблица характеристик

  create_table "features", force: :cascade do |t|
    t.integer "instance_id"
    t.integer "user_id"
    t.integer "experiment_id"
    t.string "name"
    t.text "values"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.boolean "is_allow_na", default: false, null: false
    t.index ["experiment_id"], name: "index_features_on_experiment_id"
    t.index ["instance_id"], name: "index_features_on_instance_id"
    t.index ["user_id"], name: "index_features_on_user_id"
  end
...