我有这个用于我的迁移:
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。
答案 0 :(得分:3)
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的问题。