我的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)