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

时间:2014-07-23 19:14:20

标签: ruby-on-rails regex

My Rails应用程序面向大学生 - 只有伯克利和华盛顿大学的学生才能立即注册,我使用正则表达式来完成。用户模型中有一列名为" school"我想根据他们的电子邮件地址填写他们学校的名字。以下是我的User.rb文件(仅使用Berkeley)中验证内容的示例:

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

在用户控制器中,如果我添加正则表达式来识别该电子邮件域,我怎么能将@ user.school列设置为伯克利,或华盛顿大学呢?

2 个答案:

答案 0 :(得分:0)

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

您也可以将正则表达式与哈希中的键相关联,使这更容易,粗略地说:

EMAILS = {   “伯克利”:/\ A [.w+-.]+@berkeley.edu\z/i,   “华盛顿”:/无论/ }

迭代哈希以获取值和正则表达式:

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

使用相同的方法进行电子邮件验证,方法是针对该方法验证:email,而不是Custom Validation section of the Active Record Validations Guide中详述的简单正则表达式。您可能需要调整返回值等以使函数适用于这两种情况,或者为查找周围的验证编写一个瘦包装器。

考虑实际设置值的回调,例如:after_validation:before_save

答案 1 :(得分:0)

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

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

user_school = find_what_school_user_goes_to(@user.email)
@user.update(:school user_school)
相关问题