postgresql 如何在Rails迁移中限制字符串列的值?

xxls0lw8  于 2023-03-17  发布在  PostgreSQL
关注(0)|答案(3)|浏览(89)

我想使用ga Postgres 9.5数据库构建Rails数据库迁移,其中我有一个字符串列

def change
    create_table :transactions do |t|
      t.string transaction_type, null: false

但是我想把列的值限制为特定的字符串。2有什么方法可以把它构建到我的迁移中吗?3如果有,看起来怎么样?

9cbw7uwe

9cbw7uwe1#

你可以在数据库中创建一个枚举类型,然后用这个类型创建一个新的列。

qvsjd97n

qvsjd97n2#

我认为更好的方法是在create操作的事务控制器中添加一个字符串模式验证方法,如下所示。你可以找到更多关于回调here的信息。

before_action :validate_transaction_type, only: [:create]
suzh9iv8

suzh9iv83#

我知道这不是提问的用户想要的,但是我在这里结束了尝试对字符串列做一个类似的验证。对于其他遇到这个问题的人来说,另一种添加验证的方法是在模型中使用inclusion:验证器。
其内容如下:

validates :cuteness, inclusion: { within: %w(not meh okay kinda-cute), message: "%{value} is not a valid cuteness level" }

它也可以重写为validates_inclusion_of

validates_inclusion_of :age, :in => 0..20 , message: "%{value} is not between 0 and 20"

最后,请注意keyworkdwithin:in:的别名,因此两者都可以工作。

相关问题