验证成功后的数据转换

发布于 2024-10-05 16:31:28 字数 597 浏览 6 评论 0原文

我在标准化 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 

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

上面的代码不能很好地工作,因为它实际上并没有保存它。我查看了触发类似

after_validation :normalize_upc

def normalize_upc
    upc = upc.strip
end

.. 的方法,但上面的方法也不起作用。

你们在验证后做什么来验证和转换数据?

I'm having a bit of a problem normalizing a UPC string code so that I can store it in the same format in the database.

I'm using the ean gem to check if the string is good (which is working fine), but if I throw some assignment code after it validates such as:

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 

The strip call is just an example as it's a string. I'll actually be removing the dashes in the upc.

The above code doesn't work so well as it doesn't actually save it. I had a look at triggering a method like

after_validation :normalize_upc

def normalize_upc
    upc = upc.strip
end

..but the above doesn't work either.

What do you guys do to validate and transform data after validation?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

叹梦 2024-10-12 16:31:28

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

I would make my validator strict, and then use a before_validation filter to do any necessary transformations.

给妤﹃绝世温柔 2024-10-12 16:31:28

我建议覆盖 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

I would recommend overriding the setter method in your model for upc and not having a separate method for normalizing it. This would be accomplished with something like:

def upc=(value)
  self.upc = value.strip
end

Edit:

I would also clean up your validation method to remove this functionality like so:

validate :upc_check, :unless => lambda {|m| m.upc.nil?}

def upc_check
  errors.add(:upc, 'is not valid') unless upc.ean?
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文