我有一个创建字符串列的迁移。我想允许我的列为 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 != ""
.
我会在模型中而不是在迁移中处理这个问题。