Индекс schema.rb отличается от индекса отдельной миграции - PullRequest
2 голосов
/ 10 августа 2011

У меня есть это для моей миграции:

class CreateCategories < ActiveRecord::Migration
  def up
    create_table :categories do |t|
      t.integer :parent_id
      t.string  :title, :null => false
    end
    execute('CREATE UNIQUE INDEX ix_categories_root_title ON categories (title) WHERE parent_id IS NULL') 
  end
  def down
    drop_table :categories
  end
end

Но когда я заглянул в db / schema.rb, я увидел это вместо:

ActiveRecord::Schema.define(:version => 20110808161830) do
  create_table "categories", :force => true do |t|
    t.integer "parent_id"
    t.string  "title", :null => false
  end
  add_index "categories", ["title"], :name => "ix_categories_root_title", :unique => true
end

Что, очевидно, не одно и то же и неправильное. Есть ли способ заставить schema.rb создать такой же индекс? Я использую postresql с Rails 3.1 pre.

Ответы [ 2 ]

3 голосов
/ 25 августа 2012

Иафонов был прав, когда сказал, что нужно включить эту опцию конфигурации в вашем файле application.rb:

config.active_record.schema_format = :sql

Однако простое включение этой функции не работает должным образом. Он не будет автоматически генерировать файл schema.sql. Вместо этого вы можете использовать rake db:structure:dump, который создаст файл structure.sql. Затем вы можете загрузить его с rake db:structure:load

Здесь есть хорошее объяснение: schema.sql не создается даже после установки schema_format =: sql

1 голос
/ 10 августа 2011

Я не знаю точную причину вашей проблемы, но вы определенно можете сохранить свой индекс, если будете хранить свою схему в sql

config.active_record.schema_format = :sql

Кстати: какой дБ вы используете? На самом деле это больше похоже на проблему с драйвером БД, чем на проблему с рельсами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...