Я даю очень подробный ответ на этот вопрос " Как проверить, имеет ли столбец значение? ".
Прежде всего, важно отметить, что атрибут может иметь четыре вида значений.
- ноль значение, т. Е. "Ноль", хранящийся в базе данных
- пусто значение, т. Е. "" Пустая строка с без пробелов
- пусто строка с пробелами"".
- значение присутствует в базе данных, т.е. непустая строка .
Вот подробное поведение всех существующих методов (Ruby 2.2.2), которые могут быть использованы в этом случае.
Первый метод: .empty?
Для ноль значение => Выдает исключение
2.2.2 :037 > object.attribute
=> nil
2.2.2 :025 > object.attribute.empty?
NoMethodError: undefined method `empty?' for nil:NilClass
Для пусто значение, т.е. "" пустая строка с без пробелов
2.2.2 :037 > object.attribute
=> ""
2.2.2 :025 > object.attribute.empty?
true
пусто строка с пробелами"".
2.2.2 :041 > object.attribute
=> " "
2.2.2 :042 > object.attribute.empty?
=> false
значение присутствует в базе данных, т.е. непустая строка .
2.2.2 :045 > object.attribute
=> "some value"
2.2.2 :046 > object.attribute.empty?
=> false
Второй метод: .nil?
ноль значение, т. Е. "Ноль", хранящийся в базе данных
2.2.2 :049 > object.attribute
=> nil
2.2.2 :050 > object.attribute.nil?
=> true
пусто значение т.е. "" пустая строка с без пробелов
2.2.2 :053 > object.attribute
=> ""
2.2.2 :054 > object.attribute.nil?
=> false
пусто строка с пробелами"".
2.2.2 :057 > object.attribute
=> " "
2.2.2 :058 > object.attribute.nil?
=> false
значение присутствует в базе данных, т.е. непустая строка .
2.2.2 :061 > object.attribute
=> "some value"
2.2.2 :062 > object.attribute.nil?
=> false
Третий метод: .blank?
ноль значение, т. Е. "Ноль", хранящийся в базе данных
2.2.2 :065 > object.attribute
=> nil
2.2.2 :066 > object.attribute.blank?
=> true
пусто значение т.е. "" пустая строка с без пробелов
2.2.2 :069 > object.attribute
=> ""
2.2.2 :070 > object.attribute.blank?
=> true
пусто строка с пробелами"".
2.2.2 :073 > object.attribute
=> " "
2.2.2 :074 > object.attribute.blank?
=> true
значение присутствует в базе данных, т.е. непустая строка .
2.2.2 :075 > object.attribute
=> "some value"
2.2.2 :076 > object.attribute.blank?
=> false
Четвертый метод: .present?
ноль значение, т.е. "ноль", хранящийся в базе данных
2.2.2 :088 > object.attribute
=> nil
2.2.2 :089 > object.attribute.present?
=> false
пусто значение т.е. "" пустая строка с без пробелов
2.2.2 :092 > object.attribute
=> ""
2.2.2 :093 > object.attribute.present?
=> false
пусто строка с пробелами"".
2.2.2 :096 > object.attribute
=> " "
2.2.2 :097 > object.attribute.present?
=> false
значение присутствует в базе данных, т.е. непустая строка .
2.2.2 :100 > object.attribute
=> "some value"
2.2.2 :101 > object.attribute.present?
=> true
Вы можете использовать любой из четырех в зависимости от ситуации, с которой вы столкнулись.
Спасибо