我需要在Rails应用程序的现有表中添加一个新的整数列.该列只能有值1、2、3,因此我想向表/列添加一个判断约束.如何在Rails迁移中指定此约束?

推荐答案

Rails迁移不提供任何添加约束的方法,但您仍然可以通过迁移来添加约束,只需将实际的SQL传递给execute()

创建迁移文件:

ruby script/generate Migration AddConstraint

现在,在迁移文件中:

class AddConstraint < ActiveRecord::Migration
  def self.up
    execute "ALTER TABLE table_name ADD CONSTRAINT check_constraint_name CHECK (check_column_name IN (1, 2, 3) )"
  end

  def self.down
    execute "ALTER TABLE table_name DROP CONSTRAINT check_constraint_name"
  end
end

Ruby-on-rails相关问答推荐

对Rails进行枚举不允许空值

参数数量错误(给定1个,预期为0个;必需关键字:IO、文件名)-活动存储

Rails 6升级没有加载Mongoid,这是一个问题

如何在不触发每次编译的情况下运行`bin/rails测试`?

如何使用 Rails 语义记录器记录整个请求(标头、正文等)

如何断言 Ruby 单元测试中的错误消息?

ActiveRecord 错误地转义 JSON 字符串

NoMethodError:Puma::Events:Class 的未定义方法字符串

插件和 Ruby gem 之间的区别?

在 Ruby on Rails html.erb 文件中循环

你能从 Heroku dynos/workers 中获得多少性能?

查找日期时间与今天匹配的记录 - Ruby on Rails

Rails(或 Ruby):Yes/No 而不是 True/False

mongoid 中 embeds_many 和 has_many 的区别

使用回形针调整图像大小

在 factory_girl 中填充与 children 的关联

如何在rails中异步加载部分页面

如何仅使用 PostgreSQL 创建简单的模糊搜索?

如何设置 MiniTest?

将现有的 html.erb 转换为 Haml