我在将UPC字符串代码规范化时遇到了一些问题,因此我可以将它以相同的格式存储在数据库中。
我正在使用ean
gem来检查字符串是否正常(哪个工作正常),但如果我在验证之后抛出一些赋值代码,例如:
validate :upc_check
def upc_check
if !upc.nil?
if !upc.ean?
errors.add(:upc, 'is not a valid UPC.')
else
upc = upc.strip
end
end
end
条带调用只是一个例子,因为它是一个字符串。我实际上将删除upc中的破折号。
上面的代码不能很好地工作,因为它实际上没有保存它。我看了一下触发像
这样的方法after_validation :normalize_upc
def normalize_upc
upc = upc.strip
end
..但上述情况也不起作用。
您在验证后如何验证和转换数据?
答案 0 :(得分:1)
我建议覆盖你的模型中的setter方法upc,而没有一个单独的方法来规范化它。这将通过以下方式实现:
def upc=(value)
self.upc = value.strip
end
编辑:
我还会清理你的验证方法以删除此功能,如下所示:
validate :upc_check, :unless => lambda {|m| m.upc.nil?}
def upc_check
errors.add(:upc, 'is not valid') unless upc.ean?
end
答案 1 :(得分:1)
我会使我的验证器严格,然后使用before_validation过滤器进行任何必要的转换。