我正在使用apn_on_rails进行带有rails的iphone推送通知。
现在,令牌上的验证不再有效,因为验证需要每8个字符一个空格: validates_format_of:token,:with => / ^ [A-Z0-9] {8} \ S [A-Z0-9] {8} \ S [A-Z0-9] {8} \ S [A-Z0-9] {8} \ S [A-Z0-9] {8} \ S [A-Z0-9] {8} \ S [A-Z0-9] {8} \ S [A-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内部的源的情况下执行此操作?
感谢。
答案 0 :(得分:1)
或者让代码验证:
[56, 48, 40, 32, 24, 16, 8].each { |i| code.insert(i, ' ') }
答案 1 :(得分:1)
您不是第一个遇到此问题的人 - 我发现以下文章Removing Rails validations with metaprogramming很有帮助。
答案 2 :(得分:1)
元编程示例非常棒,但您可以轻松地破坏依赖于此验证的代码。我建议的是编写自己的访问器方法,修改属性以使用gem。例如,使用wesgarrison的代码并修改setter:
def token= token
@token = [56, 48, 40, 32, 24, 16, 8].each { |i| token.insert(i, ' ') }
end
然后,您可以将此代码添加到您在代码中使用的包装器模块或子类中。