Rails迁移允许您使用limit属性为字符串列指定最大长度。是否存在对应的最小长度属性,或者只能通过模型上的验证来完成?
3duebb1j1#
不,没有相应的min_length声明。最佳解决方案是在模型级别进行验证。您可以在此处查看可用选项:https://github.com/rails/rails/blob/acbcec8ea869849f98213fea5e554bb3a82fea61/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb#L55
7eumitmz2#
...只能通过验证模型来完成吗?也许,不完全是你要找的,但如果你使用Postgresql,你可以使用CONSTRAINT:
CONSTRAINT
ALTER TABLE table_name ADD CONSTRAINT check_minimum_length CHECK (LENGTH(column_name) >= 5);
尽管如此,我还是强烈建议使用ActiveModel::Validations,因为验证应该在应用程序层完成。
ActiveModel::Validations
egdjgwm83#
最大长度是一个数据库特性,它控制数据库为列分配多少内存。这与验证相比有很大不同,因为数据库只会截断超过该长度的任何内容。据我所知,任何db上都没有相应的最小值。有些数据库(如Postgres)允许您在列上放置constraints以强制数据库层的业务逻辑,但这是一个非常不同的故事。如果您需要在绕过验证时防止插入无效数据,或者避免潜在的争用条件,约束最有用。在大多数情况下,application (Rails) level validation就足够了,而且约束必须用应用层验证来补充。参见:
a8jjtwal4#
是的,这是可能的。就像Rails Guides所展示的,你应该在模型中使用:
validates :column_name, length: { minimum: 2 }
访问链接以了解更多验证类型。
4条答案
按热度按时间3duebb1j1#
不,没有相应的min_length声明。最佳解决方案是在模型级别进行验证。您可以在此处查看可用选项:
https://github.com/rails/rails/blob/acbcec8ea869849f98213fea5e554bb3a82fea61/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb#L55
7eumitmz2#
...只能通过验证模型来完成吗?
也许,不完全是你要找的,但如果你使用Postgresql,你可以使用
CONSTRAINT
:尽管如此,我还是强烈建议使用
ActiveModel::Validations
,因为验证应该在应用程序层完成。egdjgwm83#
最大长度是一个数据库特性,它控制数据库为列分配多少内存。这与验证相比有很大不同,因为数据库只会截断超过该长度的任何内容。
据我所知,任何db上都没有相应的最小值。
有些数据库(如Postgres)允许您在列上放置constraints以强制数据库层的业务逻辑,但这是一个非常不同的故事。如果您需要在绕过验证时防止插入无效数据,或者避免潜在的争用条件,约束最有用。
在大多数情况下,application (Rails) level validation就足够了,而且约束必须用应用层验证来补充。
参见:
a8jjtwal4#
是的,这是可能的。就像Rails Guides所展示的,你应该在模型中使用:
访问链接以了解更多验证类型。