是否可以在数据库列中的字符串上放置最小长度,或者只能通过模型 上的验证来完成?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否可以在数据库列中的字符串上放置最小长度,或者只能通过模型 上的验证来完成?相关的知识,希望对你有一定的参考价值。

Rails迁移允许您使用limit属性指定字符串列的最大长度。是否有最小长度的相应属性,或者只能通过模型​​上的验证来完成?

答案

不,没有相应的min_length声明。最佳解决方案是模型级别的验证。您可以在此处查看可用选项:

https://github.com/rails/rails/blob/acbcec8ea869849f98213fea5e554bb3a82fea61/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb#L55

另一答案

最大长度是一个数据库功能,它控制数据库为列分配的内存量。与验证相比,这是非常不同的,因为DB只会截断超出该长度的任何内容。

我所知道的任何数据库都没有相应的最小值。恕我直言也不是一个特别有用的功能。因此它应该由应用程序(Rails)级别验证而不是数据库模式定义来处理。

看到:

另一答案

......它只能通过模型​​上的验证来完成吗?

可能不完全是你想要的但是如果你使用Postgresql,你可以使用CONSTRAINT

ALTER TABLE table_name
  ADD CONSTRAINT check_minimum_length CHECK (LENGTH(column_name) >= 5);

不过,我强烈建议使用ActiveModel::Validations作为验证应该在应用层完成。

另一答案

是的,这是可能的。像qazxsw poi show一样,你应该在模型中使用:

Rails Guides

访问链接以获取更多验证类型。

以上是关于是否可以在数据库列中的字符串上放置最小长度,或者只能通过模型 上的验证来完成?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在三元表达式上只放置一个选项?

oraclede中数据定义语言

2022-09-03:n块石头放置在二维平面中的一些整数坐标点上 每个坐标点上最多只能有一块石头 如果一块石头的 同行或者同列 上有其他石头存在,那么就可以移除这块石头。 给你一个长度为 n 的数组

SQL编码中注意的性能问题

是否可以在 mysql 的列中使用数学函数?

通过引用字符串位置检查数据框列中的子字符串