成功验证后的数据转换

时间:2010-12-05 02:06:09

标签: ruby-on-rails normalization validation model-validation

我在将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

..但上述情况也不起作用。

您在验证后如何验证和转换数据?

2 个答案:

答案 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过滤器进行任何必要的转换。