7

我正在尝试验证电子邮件地址..它是否存在..以及它是否符合正则表达式标准 (/xyz/)。我真的需要在 Rails 中的控制器或视图级别上执行此操作,因为我打算为我的应用程序转储 ActiveRecord,因为我计划稍后使用 nosql 数据库。

有什么提示吗?建议?

在模型中,它将是以下代码..但我试图在控制器或视图中执行此操作:

VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i

  validates :email, presence: true, 
                    format: { with: VALID_EMAIL_REGEX }, 
                    uniqueness: { case_sensitive: false }
4

2 回答 2

15
class UsersController < ApplicationController
  def create
    user = User.new(params[:user])
    if valid_email?(user.email)
      user.save
      redirect_to root_url, :notice => 'Good email'
    else
      flash[:error] = 'Bad email!'
      render :new
    end
  end

private
  def valid_email?(email)
    VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
    email.present? &&
     (email =~ VALID_EMAIL_REGEX) &&
     User.find_by(email: email).empty?
  end
end

但是,我会说验证仍然属于模型,即使它不是基于 ActiveRecord 的。请看一下如何使用 ActiveModel::Validations:

http://api.rubyonrails.org/classes/ActiveModel/Validations.html http://yehudakatz.com/2010/01/10/activemodel-make-any-ruby-object-feel-like-activerecord/ http:// /asciicasts.com/episodes/219-active-model

于 2013-04-03T22:53:11.550 回答
4

即使您稍后使用 nosql,也可以将其保留在模型中。只需使用 ActiveModel 而不是 ActiveRecord。例如,不要从 ActiveRecord 继承。

class ModelName
  include ActiveModel::Validations

  attr_accessor :email

  validates :email, presence: true, 
                format: { with: VALID_EMAIL_REGEX }, 
                uniqueness: { case_sensitive: false }
于 2013-04-03T23:11:36.637 回答