schema.rb не включает в себя: уникальный на add_index - PullRequest
1 голос
/ 20 июня 2011

У меня есть следующая миграция:

class UniqueIndexOnCustomValueKeys < ActiveRecord::Migration
  def self.up
    add_index :custom_values, [:customizable_id, :customizable_type, :custom_definition_id], {:unique=>true,:name=>:cv_unique_composite} 
  end

  def self.down
    remove_index :custom_values, :cv_unique_composite
  end
end

Когда я запускаю миграцию, она правильно создает ключ UNIQUE в базе данных разработки, но когда я смотрю на schema.rb, флаг: unique isn 'т там.Это приводит к тому, что тестовая база данных не имеет индекса UNIQUE.

Результирующая строка в schema.rb выглядит следующим образом:

add_index "custom_values", ["customizable_id", "customizable_type", "custom_definition_id"], :name => "cv_unique_composite"

Я что-то здесь не так делаю?

(Rails 3.0.8, MySql2 gem)

Ответы [ 2 ]

0 голосов
/ 18 сентября 2017

попробуйте это для себя. Up:

add_index :custom_values, [:customizable_id, :customizable_type, :custom_definition_id], unique: true, name: 'cv_unique_composite'
0 голосов
/ 19 июля 2011

Чтобы разместить уникальные индексы, вам нужно изменить active_record.schema_format в application.rb:

config.active_record.schema_format = :sql

Это заставит тестовую базу данных использовать db / development_structure.sql, которая принимает необработанные выражения sqlиз базы данных вместо команд ruby.

Этот вопрос относится к Oracle, но такая же проблема существует и для других проблем, связанных с базой данных (в данном случае уникальные индексы MySql): Почему я не получаю никаких определений индекса вмой Rails schema.db - "# нераспознанный индекс ..."

...