如何在rails控制器中验证状态和正则表达式格式?

sam*_*era 7 ruby model-view-controller controller ruby-on-rails nosql

我正在尝试验证电子邮件地址..它是否存在..以及它是否符合正则表达式标准(/ 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 }
Run Code Online (Sandbox Code Playgroud)

Uni*_*key 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
Run Code Online (Sandbox Code Playgroud)

但是,我会说验证仍然属于模型,即使它不是基于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

  • @kpaul` = ~`有时被称为`equal-tilde`,可以读作"匹配正则表达式".该结果的返回值将是它匹配的索引或nil,但通常用作布尔匹配.该表达式也可以写成`email.match(VALID_EMAIL_REGEX)`,但由于构建并返回一个matchdata对象,它会稍慢一些. (2认同)