12

我有一个迁移,我像这样创建一个产品表

class CreateProducts < ActiveRecord::Migration
  def change
    create_table :products do |t|
      t.string :name
      t.hstore :data

      t.timestamps
    end
  end
end

activerecord-postgres-hstore 页面上,他们向表(在 SQL 中)添加索引

CREATE INDEX products_gin_data ON products USING GIN(data);

但是迁移不会跟踪这种变化(我猜是因为它是 Postgres 特定的?),有没有办法从迁移中创建索引?

谢谢!

4

2 回答 2

27

在 Rails 4 中,您现在可以在迁移中执行以下操作:

    add_index :products, :data, using: :gin
于 2013-05-18T03:45:34.460 回答
15

是的!您可以进行另一次迁移并使用“执行”方法...如下所示:

class IndexProductsGinData < ActiveRecord::Migration
  def up
    execute "CREATE INDEX products_gin_data ON products USING GIN(data)"
  end

  def down
    execute "DROP INDEX products_gin_data"
  end
end

更新:您可能还想在 config/application.rb 中指定这一行:

config.active_record.schema_format = :sql

你可以在这里阅读:http: //apidock.com/rails/ActiveRecord/Base/schema_format/class

于 2012-05-15T00:12:41.397 回答