根据邮件地址正则表达式设置列值



我的Rails应用程序是针对大学生的——现在只有伯克利和华盛顿大学的学生可以注册,我使用一个正则表达式来做到这一点。用户模型中有一个名为"school"的列,我想根据他们的电子邮件地址填写他们的学校名称。下面是我的User中验证的示例。

berkeley_regex = /A[w+-.]+@berkeley.eduz/i
  validates :email, :presence => true, :format => {:with => berkeley_regex}

在User控制器中,我如何设置@user。学校列是伯克利,或者华盛顿大学,如果我添加一个正则表达式来识别电子邮件域?

将匹配的正则表达式移动到方法中

您也可以将正则表达式与散列中的键关联起来,大致如下:

email = {"Berkeley"/ [ w + -) + @berkeley.edu z/我,"Washington"//}

遍历哈希以获得值和正则表达式:

EMAILS.each do |school, regex|
  # If it matches, return the `school` value
end

使用相同的方法进行电子邮件验证,根据方法验证:email,而不是简单的正则表达式,详见活动记录验证指南的自定义验证部分。您可能需要调整返回值等以使函数同时工作,或者为查找周围的验证编写一个薄包装器。

考虑一个回调来实际设置值,例如,:after_validation:before_save

首先,创建一个新方法,根据匹配的正则表达式返回Berkeley或U of Washington。

接下来,您将需要对用户进行更新,以便:

user_school = find_what_school_user_goes_to(@user.email)
@user.update(:school user_school)

最新更新