电子邮件匹配正则表达式返回未定义的方法'[]'为nil:NilClass

时间:2014-07-27 22:56:01

标签: ruby-on-rails ruby regex

在我的Rails应用程序中,我只允许Berkeley.edu用户立即注册,但很快就会加入华盛顿大学。我想要做的是创建一种方法来识别他们的电子邮件是哪个电子邮件域,UW.edu或Berkeley.edu,并在此基础上设置用户模型中的学校属性。

我认为我大部分都失望了,但我有点陷入困境。所以在User.rb中我有一个before_save:match钩子,然后是一个匹配方法,如下所示:

def match
    matches = self['email'].match(/((?<berk>.*?berkeley\.edu))/i)
    self.school = 'berk' if matches['berkeley'].present?
  end

我得到的错误如下:

undefined method `[]' for nil:NilClass

Extracted source (around line #10):


  8 def match
  9  matches = self['email'].match(/((?<berk>.*?berkeley\.edu))/i)
  10  self.school = 'berk' if matches['berkeley'].present?
    end

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

你一定要检查自己['email']是什么。根据您的错误,它似乎是零。

另外,第10行应该是self.school = 'berk' if matches['berk'].present?,因为您将它存储在'berk'下的匹配数据中:

[4] pry(main)> e.match(/((?<berk>.*?berkeley\.edu))/i)['berkeley']
IndexError: undefined group name reference: berkeley
from (pry):4:in `[]'
[5] pry(main)> e.match(/((?<berk>.*?berkeley\.edu))/i)['berk']
=> "phil@berkeley.edu"
在我的案例中,我是“phil@berkeley.edu”。