在ActiveRecord(或ActiveModel)中,我希望以下规范传递
it { should allow_value("").for(:my_string) }
it { should_not allow_value(nil).for(:my_string) }
我试过了
validates :my_string, {
:length => { :in => 0..255 },
:presence => true,
:allow_blank => true,
:allow_nil => false,
}
以及
validates :my_string, {
:length => { :in => 0..255 },
:allow_blank => true,
:allow_nil => false,
}
但是它既可以允许“”也可以不包含任何一种颜色。
答案 0 :(得分:35)
这对我有用
validates :my_string, length: { in: 0..255, allow_nil: false }
如果您只想验证该字段不是null,但不关心空/空字符串,则可以正常工作:
validates :my_string, length: { minimum: 0, allow_nil: false, message: "can't be nil" }
答案 1 :(得分:6)
您可能需要为此进行自定义验证:
validates :my_string, :length => { :in => 0..255 }
validate :my_string_is_valid
def my_string_is_valid
self.errors.add :base, 'My string can not be nil' if self.my_string.nil?
end
答案 2 :(得分:6)
您可以尝试:
validates :my_string, exclusion: { in: [nil]}
它是ActiveRecord中验证的一部分。
我已经尝试了其他人,所有人都非常恭敬,或者也允许没有。
答案 3 :(得分:1)
或者也许:
validates :my_string, :length => { :in => 0..255 }, :allow_nil => false
似乎allow_nil
未覆盖allow_blank
。
所以你最好不要指定allow_blank
答案 4 :(得分:1)
您可以创建一个简单的自定义验证器(放置在app/validators
dir中)
class NotNilValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
record.errors[attribute] << "must not be nil" if value.nil?
end
end
然后
validates :my_string, not_nil: true
答案 5 :(得分:0)
这对我有用:
validates_exclusion_of :my_string, in: [nil]