ruby-on-rails - 如何在不执行原始 SQL 查询的情况下在 Activerecord 中添加数据库域?
问题描述
我想创建一个数据库域,例如,像这样:
CREATE DOMAIN colour AS VARCHAR CHECK (VALUE IN ('red', 'green', 'blue'));
如何在 Rails Activerecord 中执行此操作而不在迁移中执行原始 SQL 查询?
另一个问题是,如何在 schema.rb 中反映域创建?
有什么宝石吗?
我的设置是 PostgreSQL 9.6 和 Rails 5.0。
我希望有一种方法,如enable_extension
(docs)或create_trigger
hair_trigger gem (link)。
解决方案
我认为最好的方法是为此使用原始 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
然后您可以设置一个运行这些迁移的 rake 任务,如此处所述
推荐阅读
- javascript - 如何将相机始终设置在用户地理位置的中心
- php - 结合mysql结果
- php - 不显示带有 Skype 链接的 Href
- snowflake-cloud-data-platform - 数据共享 如何与读者帐户共享 UDF?
- python - Python script export to .exe including some excel and numpy calculations
- vba - 如何在没有重复代码的情况下编写 or 语句(VBA)
- amazon-web-services - 如何在 AWS ApiGatewy 方法中设置自定义标头
- android - 在 Kotlin 中使用实时数据和 RxJava 的领域
- excel - 使用 VBA 自动调整特定单元格行
- javascript - Webpack:禁用延迟加载