vii*_*sko 0 ruby validation ruby-on-rails
我有一个基于ruby指南的自定义电子邮件验证程序类:
class EmailValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
unless value =~ /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
record.errors[attribute] << (options[:message] || "is not an email")
end
end
end
Run Code Online (Sandbox Code Playgroud)
此类位于app/validators/email_validator.rb中
模型:
class User < ActiveRecord::Base
validates :name, :email, presence: true
validates :email, email: true
end
Run Code Online (Sandbox Code Playgroud)
错误:
`rescue in block in validates': Unknown validator: 'EmailValidator' (ArgumentError)
Run Code Online (Sandbox Code Playgroud)
运行测试(rspec)时会出现此错误.
我刚遇到这个问题,这是真正的解决方案.
事实证明,从Rails文档复制和粘贴代码可能会留下混合空格字符,这会导致代码错误地解析.这是我的验证器的原始和更正版本的示例gist差异.注意一切看起来都一样,但不知何故有一个差异!如果您运行第一个版本,您将得到相同的错误:
NameError: undefined local variable or method 'record' for WholeNumberValidator:Class
Run Code Online (Sandbox Code Playgroud)
如果我们检查字节,我们会看到差异:
# Standard Space
' '.bytes # => [32]: U+0020, Space
# Space from Copy/Paste
' '.bytes # => [194, 160]: U+00A0, No break space
Run Code Online (Sandbox Code Playgroud)
替换文件中的空格,一切都应该有效!
| 归档时间: |
|
| 查看次数: |
1630 次 |
| 最近记录: |