我的应用程序模型中有很多字符串,每个字符串不应包含任何前导,尾随和重复的空白。
为了确保这一点,我为每个属性创建了单独的属性setter方法:
def label=( text )
write_attribute( :label, text.strip.squeeze(' '))
end
def description=( text )
write_attribute( :description, text.strip.squeeze(' '))
end
...
应该有更优雅,干燥的方式。包括支票为零。
答案 0 :(得分:1)
在您的关注点中定义一个类方法,创建所有需要的属性设置器。对于所有空白值,此版本将返回nil,对于其他值,此版本将返回修剪和压缩的字符串:
module ApplicationModel
extend ActiveSupport::Concern
module ClassMethods
def set_trimmed( *attributes )
attributes.each do |a|
define_method "#{ a.to_s }=" do |t|
tt = t.blank? ? nil : t.strip.squeeze(' ')
write_attribute( a, tt )
end
end
end
end
end
并简单列出模型中要为其定义此属性设置器的属性(不要忘记包含上面的模块):
include ApplicationModel
set_trimmed :label, :description, :postal_address, :street_address, ...