Это потому, что в Ruby пустая строка имеет вид true .
Только false
и nil
имеют значение false, все остальное верно в Ruby, включая пустую строку (в отличие от языков, таких как Perl или PHP).
Вот почему Rails ввел blank?
(а позже и его противоположность present?
)
Из исходного кода Rails:
# An object is blank if it's false, empty, or a whitespace string.
# For example, "", " ", +nil+, [], and {} are all blank.
#
# This simplifies:
#
# if address.nil? || address.empty?
#
# ...to:
#
# if address.blank?
def blank?
respond_to?(:empty?) ? empty? : !self
end
# An object is present if it's not <tt>blank?</tt>.
def present?
!blank?
end