My Rails应用程序面向大学生 - 只有伯克利和华盛顿大学的学生才能立即注册,我使用正则表达式来完成。用户模型中有一列名为" school"我想根据他们的电子邮件地址填写他们学校的名字。以下是我的User.rb文件(仅使用Berkeley)中验证内容的示例:
berkeley_regex = /\A[\w+\-.]+@berkeley\.edu\z/i
validates :email, :presence => true, :format => {:with => berkeley_regex}
在用户控制器中,如果我添加正则表达式来识别该电子邮件域,我怎么能将@ user.school列设置为伯克利,或华盛顿大学呢?
答案 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)