1

我在标准化 UPC 字符串代码时遇到了一些问题,以便我可以将它以相同的格式存储在数据库中。

我正在使用eangem 来检查字符串是否良好(工作正常),但是如果我在它验证后抛出一些赋值代码,例如:

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 

strip 调用只是一个示例,因为它是一个字符串。我实际上将删除 upc 中的破折号。

上面的代码效果不佳,因为它实际上并没有保存它。我看过触发类似的方法

after_validation :normalize_upc

def normalize_upc
    upc = upc.strip
end

..但上述也不起作用。

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

4

2 回答 2

1

我建议在你的模型中为 upc 覆盖 setter 方法,并且没有单独的方法来规范化它。这将通过以下方式完成:

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
于 2010-12-05T02:18:39.313 回答
1

我会让我的验证器变得严格,然后使用 before_validation 过滤器进行任何必要的转换。

于 2010-12-05T03:00:15.817 回答