我想这样做:
validates_format_of :email, :with => email_regex
def email_regex
email_name_regex = '[A-Z0-9_\.%\+\-]+'
domain_head_regex = '(?:[A-Z0-9\-]+\.)+'
domain_tld_regex = '(?:[A-Z]{2,4}|museum|travel)'
return /\A#{email_name_regex}@#{domain_head_regex}#{domain_tld_regex}\z/i
end
但我收到一个错误,说我必须将正则表达式传递给validates方法。我确信你可以做这样的事情。 我错过了一步吗?
由于
答案 0 :(得分:0)
使用常数怎么样?这也可以确保正则表达式只编译一次。
class ...
FOO_BAR = /#{baz}.../
validatess ... :with => FOO_BAR
但是,我不确定为什么你的方式不起作用。
答案 1 :(得分:0)
您的代码看起来不错。我猜你在验证方法使用之前定义email_regex
方法。
您必须调试validates_format_of
得到的内容(修改RoR代码以打印:with参数类型)。这应该很容易,并帮助您解决问题。
现在我只能猜测email_regex
方法在某处被重新定义并返回除Regexp之外的其他内容。