我有一个创建字符串列的迁移。我想让我的列为零,但我不希望它具有空字符串值(''
)。我可以在迁移或模型中添加任何内容来验证是否为nil,则字符串不为空?
谢谢!
答案 0 :(得分:2)
空白字符串呢? (即:像" "
这样的字符串,带有所有空格吗?)
我不确定数据库级别是否有某些内容,但是对于activerecord模型,我会使用类似的内容:
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
来触发验证错误)而不是使用最小长度(使用blank?
方法来触发验证错误)之间的区别
https://guides.rubyonrails.org/active_record_validations.html#length(由于默认错误消息是复数形式,请查看指南中有关为minimum: 1
添加自定义消息的提示)
答案 1 :(得分:0)
您可以在模型上编写自定义验证器:
validate :validate_not_empty_string
def validate_not_empty_string
errors.add(:base, "String cannot be empty") if my_column == ""
end
自nil != ""
起,这不应为零。
我将在模型而不是迁移中进行处理。