schema.rb索引与单个迁移索引不同

时间:2011-08-10 14:51:31

标签: ruby-on-rails ruby-on-rails-3 activerecord ruby-on-rails-3.1

我有这个用于我的迁移:

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 个答案:

答案 0 :(得分:3)

当他说你在application.rb文件中启用这个配置选项时, iafonov是正确的:

config.active_record.schema_format = :sql

但是,仅启用此功能无法按预期工作。它不会自动生成schema.sql文件。相反,您可以使用rake db:structure:dump来创建structure.sql文件。然后,您可以使用rake db:structure:load

加载它

这里有一个很好的解释:schema.sql not creating even after setting schema_format = :sql

答案 1 :(得分:1)

我不知道你问题的确切原因,但如果你将你的架构存储在sql中,你绝对可以存储你的索引

config.active_record.schema_format = :sql

顺便说一句:您使用哪个db?实际上这更像是db驱动程序的问题而不是rails的问题。