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

我有这个用于我的迁移:

class CreateCategories  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创建相同的索引? 我正在使用带有Rails 3.1 pre的postresql。

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

 config.active_record.schema_format = :sql 

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

这里有一个很好的解释: 即使在设置schema_format =:sql之后,schema.sql也无法创建

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

 config.active_record.schema_format = :sql 

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