将方法传递给validates_format_of

时间:2009-05-10 19:12:23

标签: ruby-on-rails

我想这样做:

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方法。我确信你可以做这样的事情。 我错过了一步吗?

由于

2 个答案:

答案 0 :(得分:0)

使用常数怎么样?这也可以确保正则表达式只编译一次。

class ...
  FOO_BAR = /#{baz}.../

  validatess ... :with => FOO_BAR

但是,我不确定为什么你的方式不起作用。

答案 1 :(得分:0)

您的代码看起来不错。我猜你在验证方法使用之前定义email_regex方法。

您必须调试validates_format_of得到的内容(修改RoR代码以打印:with参数类型)。这应该很容易,并帮助您解决问题。

现在我只能猜测email_regex方法在某处被重新定义并返回除Regexp之外的其他内容。