如何在ActiveRecord中添加数据库域而不执行原始SQL查询?

时间:2019-01-29 12:32:27

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

例如,我想创建一个数据库域:

CREATE DOMAIN colour AS VARCHAR CHECK (VALUE IN ('red', 'green', 'blue'));

如何在Rails Activerecord中执行此操作而不在迁移中执行原始SQL查询?
另一个问题是,如何在schema.rb中反映域的创建?
有宝石吗?

我的设置是PostgreSQL 9.6和Rails 5.0。

我希望像hair_trigger gem(docs)一样有enable_extensionlink)或create_trigger之类的方法。

1 个答案:

答案 0 :(得分:2)

我认为做到这一点的最佳方法实际上是为此编写带有原始SQL的迁移

class ExampleMigration < ActiveRecord::Migration
  def change
    reversible do |dir|
      dir.up do
        # create color ype
        execute <<-SQL
          CREATE DOMAIN colour AS VARCHAR CHECK (VALUE IN ('red', 'green', 'blue'));
        SQL
      end

      dir.down do
        # drop color type
        execute <<-SQL
          DROP DOMAIN colour;
        SQL
      end
    end
  end
end

然后您可以按照本answer

中的说明设置运行这些迁移的rake任务