33

如果我做

  validates :body, :presence => true, :length => {:maximum => 30000, :message => ' is a bit long...'}
  validates :body, :length => {:minimum => 10, :message => ' is a bit short...'}

我仍然有可能拥有仅包含spaces/r/n- 不可见字符的文本,虽然根据定义该文本不是空白的,但通过查看它是空白的

如何验证文本是否具有上面列出的最小和最大长度并且也是可见的(不是 10 个空格)

4

3 回答 3

69

Rails 添加了方便的方法blank?来检查 false、nil 和空字符串,如此所述。
Rails 还添加了方便的验证器allow_blank: false

所以在你的情况下应该是:

validates :body, presence: true, allow_blank: false


编辑(上面的原始答案):

正如下面的答案所述,allow_blank: false不需要,因为这是presence: true.

于 2013-08-31T17:09:45.357 回答
29

presence: true根据 http://guides.rubyonrails.org/active_record_validations.html#presence已经这样做了

此帮助器验证指定的属性不为空。它使用空白?方法来检查值是 nil 还是空字符串,即一个空字符串或由空格组成的字符串。

于 2014-07-18T20:02:45.647 回答
6

如果您尝试添加如下内容会怎样:

validates_format_of :body, :with => /\A[[:graph:]]\Z/i

笔记:

  • validates_format_of让您使用正则表达式进行验证
  • [[:graph:]]让您检查字符串中的可打印字符(请参阅“字符类”
于 2013-03-18T18:47:19.417 回答