How to validate text isn't blank in Rails

if I do

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

I still have a possibility of having a text which includes only spaces and /r or /n - non visible chars, which while the text isn't blank by definition, it is blank by looking at it

How can I validate that the text had a min and max length listed above and is also visible (not 10 spaces)

Answers


Rails adds the handy method blank? which checks for false, nil and empty strings as described here. Rails also adds the handy validator allow_blank: false.

So in your case it should be:

validates :body, presence: true, allow_blank: false


Edit (original answer above):

As stated in the answer below, allow_blank: false is not needed as that's the default behaviour of presence: true.


presence: true already does that according to http://guides.rubyonrails.org/active_record_validations.html#presence

This helper validates that the specified attributes are not empty. It uses the blank? method to check if the value is either nil or a blank string, that is, a string that is either empty or consists of whitespace.


What if you try adding something like this:

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

Notes:

  • validates_format_of lets you validate with regex
  • [[:graph:]] lets you check a string for printable characters (see "Character Classes")

Need Your Help

How can I rethrow an exception in Javascript, but preserve the stack?

javascript exception exception-handling stack-trace callstack

In Javascript, suppose I want to perform some cleanup when an exception happens, but let the exception continue to propagate up the stack, eg:

Kubernetes vs. CloudFoundry

kubernetes cloudfoundry pivotal-cloud-foundry

The next version of CloudFoundry / Diego will offer native support for Docker containers which will be orchestrated across multible hosts [link].