Вот удобный модуль, который вы можете добавить в lib и включить в свои модели.Он не имеет исключений, которые вы упомянули, но ищет метод strip!
, который может быть достаточно хорошим.Вы можете добавить функцию исключений довольно легко, если это необходимо.
# lib/attribute_stripping.rb
module AttributeStripping
def self.included(context)
context.send :before_validation, :strip_whitespace_from_attributes
end
def strip_whitespace_from_attributes
attributes.each_value { |v| v.strip! if v.respond_to? :strip! }
end
end
Использовать так:
class MyModel < ActiveRecord::Base
include AttributeStripping
# ...
end
ОБНОВЛЕНИЕ (9/10/2013):
Возвращаясь к этому ответу пару лет спустя, я вижу, как изменились ветры.Есть более чистый способ сделать это сейчас.Создайте модуль, подобный следующему:
module AttributeStripper
def self.before_validation(model)
model.attributes.each_value { |v| v.strip! if v.respond_to? :strip! }
true
end
end
и установите его метод, который будет вызываться в нужное время в вашей модели:
class MyModel < ActiveRecord::Base
before_validation AttributeStripper
# ...
end
Этот модуль легче протестировать, поскольку он не смешан.