首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何覆盖gem中activerecord中的验证调用?

如何覆盖gem中activerecord中的验证调用?
EN

Stack Overflow用户
提问于 2010-02-15 15:49:04
回答 3查看 1.6K关注 0票数 3

我正在使用apn_on_rails与rails进行iphone推送通知。

现在,令牌上的验证不再有效,因为验证要求每8个字符使用一个空格: validates_format_of : token,:with => /^a-z0-9{8}\sa-z0-9{8}\sa-z0-9{8}\sa-z0-9{8}\sa-z0-9{8}\sa-z0-9{8}\sa-z0-9{8}\sa-z0-9{8}$/

http://github.com/markbates/apn_on_rails/blob/master/lib/apn_on_rails/app/models/apn/device.rb

但是我从Objective-C得到的设备令牌没有空间。

所以我想用=>覆盖验证: validates_format_of :token,:with => /^a-z0-9{64}$/

在不修改gem内部源代码的情况下,如何做到这一点?

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2010-02-16 00:53:28

或者让代码生效:

代码语言:javascript
运行
复制
[56, 48, 40, 32, 24, 16, 8].each { |i| code.insert(i, ' ') }
票数 1
EN

Stack Overflow用户

发布于 2010-07-29 13:28:31

您不是第一个遇到这个问题的人--我发现下面这篇名为Removing Rails validations with metaprogramming的文章很有帮助。

票数 1
EN

Stack Overflow用户

发布于 2010-09-01 02:17:05

元编程示例很棒,但是您很容易破坏依赖于此验证的代码。我推荐的是编写自己的访问器方法,修改属性以与gem一起使用。例如,使用wesgarrison的代码并修改setter:

代码语言:javascript
运行
复制
def token= token
  @token = [56, 48, 40, 32, 24, 16, 8].each { |i| token.insert(i, ' ') }
end

然后,您可以将此代码添加到包装模块或代码中使用的子类中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2264555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档