3

我正在将 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 中的源代码的情况下做到这一点?

谢谢。

4

3 回答 3

1

You're not the first with this issue - I found the following article called Removing Rails validations with metaprogramming helpful.

于 2010-07-29T05:28:30.930 回答
1

或者使代码验证:

[56, 48, 40, 32, 24, 16, 8].each { |i| code.insert(i, ' ') }
于 2010-02-15T16:53:27.910 回答
1

元编程示例很棒,但您很容易最终破坏依赖此验证的代码。我建议您编写自己的访问器方法来修改属性以使用您的 gem。例如,使用 wesgarrison 的代码并修改 setter:

def token= token
  @token = [56, 48, 40, 32, 24, 16, 8].each { |i| token.insert(i, ' ') }
end

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

于 2010-08-31T18:17:04.947 回答