ruby-on-rails 是否可以为数据库列中的字符串设置一个最小长度,或者只能通过对模型的验证来实现?

nue99wik  于 2023-02-06  发布在  Ruby
关注(0)|答案(4)|浏览(100)

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

3duebb1j

3duebb1j1#

不,没有相应的min_length声明。最佳解决方案是在模型级别进行验证。您可以在此处查看可用选项:
https://github.com/rails/rails/blob/acbcec8ea869849f98213fea5e554bb3a82fea61/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb#L55

7eumitmz

7eumitmz2#

...只能通过验证模型来完成吗?
也许,不完全是你要找的,但如果你使用Postgresql,你可以使用CONSTRAINT

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

尽管如此,我还是强烈建议使用ActiveModel::Validations,因为验证应该在应用程序层完成。

egdjgwm8

egdjgwm83#

最大长度是一个数据库特性,它控制数据库为列分配多少内存。这与验证相比有很大不同,因为数据库只会截断超过该长度的任何内容。
据我所知,任何db上都没有相应的最小值。
有些数据库(如Postgres)允许您在列上放置constraints以强制数据库层的业务逻辑,但这是一个非常不同的故事。如果您需要在绕过验证时防止插入无效数据,或者避免潜在的争用条件,约束最有用。
在大多数情况下,application (Rails) level validation就足够了,而且约束必须用应用层验证来补充。
参见:

a8jjtwal

a8jjtwal4#

是的,这是可能的。就像Rails Guides所展示的,你应该在模型中使用:

validates :column_name, length: { minimum: 2 }

访问链接以了解更多验证类型。

相关问题