Я бы хотел attributes.each
перебирать все имена атрибутов и значения текущего экземпляра (игнорируя имена атрибутов). Для каждого значения я бы назвал try(:strip!)
, чтобы убрать пробел из значения. Обратите внимание, что try
вызывает strip!
только для значений, которые на самом деле respond_to
strip
(что означает в основном только строки), поэтому он будет игнорировать nil
значения или значения неподдерживаемых типов, таких как отметки времени или логические значения.
before_validation :sanitize_strings
private
def sanitize_strings
attributes.each { |_, value| value.try(:strip!) }
end
Или, если вы хотите очистить только определенные атрибуты, вы можете просто перебрать их имена:
ATTRIBUTES_TO_SANITIZE = %i[name title description]
def sanitize_strings
ATTRIBUTES_TO_SANITIZE.each { |attr| send(attr).try(:strip!) }
end