在字符串列上允许 nil 值,但在 Rails 迁移中不允许空字符串



我有一个创建字符串列的迁移。我想允许我的列为 nil,但我不希望它有空字符串值 ( '' )。我可以在迁移或模型中包含任何内容来验证如果不是 nil,则字符串不为空?

空白字符串呢?(即:像" "这样带有所有空格的字符串?

我不确定数据库级别是否有某些内容,但对于活动记录模型,我会使用如下内容:

validates :my_column, presence: true, allow_nil: true

此验证将检查字符串是否不为空(如果字符串也" ",它将阻止保存模型,而不仅仅是""

https://guides.rubyonrails.org/active_record_validations.html#presence


如果您只想排除""但允许" ",那么我会使用类似的东西

validates :my_column, length: {minimum: 1}, allow_nil: true

请注意使用最小长度(使用 length 触发验证错误)与 Presence(使用 blank? 方法触发验证错误)之间的区别

https://guides.rubyonrails.org/active_record_validations.html#length(查看指南中有关为minimum: 1添加自定义消息的提示,因为默认错误消息是复数形式)

您可以在模型上编写自定义验证器:

validate :validate_not_empty_string
def validate_not_empty_string
  errors.add(:base, "String cannot be empty") if my_column == ""
end

这不应该为零而火,因为nil != "".

我会在模型中而不是在迁移中处理这个问题。

最新更新