我对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

..但是以上也不起作用。

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

有帮助吗?

解决方案

我将使验证器严格,然后使用tore_validation过滤器进行任何必要的转换。

其他提示

我建议您在模型中为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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top