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

时间:2019-01-04 18:05:32

标签: ruby-on-rails

我有一个创建字符串列的迁移。我想让我的列为零,但我不希望它具有空字符串值('')。我可以在迁移或模型中添加任何内容来验证是否为nil,则字符串不为空?

谢谢!

2 个答案:

答案 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 != ""起,这不应为零。

我将在模型而不是迁移中进行处理。