【问题标题】:Set column value based on email address regex?根据电子邮件地址正则表达式设置列值?
【发布时间】:2014-07-23 19:14:20
【问题描述】:

我的 Rails 应用程序面向大学生——目前只有伯克利和华盛顿大学的学生可以注册,我使用正则表达式来完成。用户模型中有一个名为“学校”的列,我想根据他们的电子邮件地址填写他们学校的名称。以下是我的 User.rb 文件(仅使用 Berkeley)中的验证示例:

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

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

【问题讨论】:

    标签: ruby-on-rails regex


    【解决方案1】:

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

    您也可以将正则表达式与散列中的键相关联,大致上使这更容易:

    电子邮件 = { "伯克利": /\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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-25
        • 2011-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-20
        • 1970-01-01
        相关资源
        最近更新 更多