在rails迁移中创建约束

时间:2016-06-01 13:29:58

标签: ruby-on-rails postgresql ruby-on-rails-4 apartment-gem

我有一个创建命名约束的迁移

execute(%Q{
  ALTER TABLE dreamflore_clients
    ADD CONSTRAINT unique_clients UNIQUE( client, no_adresse );
})

但在schema.rb中,rails将此部分转换为索引

add_index "dreamflore_clients", ["client", "no_adresse"], name: "unique_clients", unique: true, using: :btree

问题是我们正在使用Apartment而新创建的租户有一个索引而不是约束我们正在使用postgreSQL功能ON CONFLICT ON CONSTRAINT

目前解决方案是回滚一些迁移并再次迁移,但这是一个非常脏的黑客

如何阻止rails创建此索引?

1 个答案:

答案 0 :(得分:1)

您是否尝试过运行rake db:structure:dump

来使用structure.sql而不是schema.rb

schema.rb在语法和切换到structure.sql方面有一些限制。应该解决这个问题。

您可以通过将config.active_record.schema_format = :sql添加到environment.rb来永久切换到structure.sql。