Как проверить текст не пусто в Rails

если я делаю

  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 пробелов)

3 ответов


Rails добавляет удобный метод blank? который проверяет наличие false, nil и пустых строк, как описано здесь.
Rails также добавляет удобный валидатор allow_blank: false.

так что в вашем случае это должно быть:

validates :body, presence: true, allow_blank: false


Edit (оригинальный ответ выше):

как указано в ответе ниже allow_blank: false не требуется, так как это поведение по умолчанию presence: true.


presence: true уже это по http://guides.rubyonrails.org/active_record_validations.html#presence

этот помощник проверяет, что указанные атрибуты не пусты. Он использует пробел? метод проверки, если значение равно нулю или пустой строке, то есть строка, которая либо пуста, либо состоит из пробелов.


Что делать, если вы попробуйте добавить что-то вроде этого:

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

Примечания: