用于Param验证的Rubygem

时间:2015-04-17 04:50:46

标签: ruby-on-rails ruby

我正在为param验证寻找一个好的rubygem

我想像这样改进代码复制。

例如,

class UsersController < ApplicationController
  def create
    handle_param_missing_exception  unless params[:p1] && params[:p2] && params[:p2] ...and so on
    handle_unvalid_format_exception unless params[:p1].is_email_format
    handle_unvalid_format_exception unless params[:p2].is_integer_format
    # and other huge validations
  end

  def update
    handle_param_missing_exception  unless params[:p1] && params[:p2] && params[:p2] ...and so on
    handle_unvalid_format_exception unless params[:p1].is_email_format
    handle_unvalid_format_exception unless params[:p2].is_integer_format
    # and other huge validations
  end
end

class ClientsController < ApplicationController
  def create
    handle_param_missing_exception  unless params[:p1] && params[:p2] && params[:p2] ...and so on
    handle_unvalid_format_exception unless params[:p1].is_email_format
    handle_unvalid_format_exception unless params[:p2].is_integer_format
    # and other huge validations
  end

  def update
    handle_param_missing_exception  unless params[:p1] && params[:p2] && params[:p2] ...and so on
    handle_unvalid_format_exception unless params[:p1].is_email_format
    handle_unvalid_format_exception unless params[:p2].is_integer_format
    # and other huge validations
  end
end

在我的项目中,曾经有过这种代码。我想删除所有的复制品。

有没有一个好的rubygem来处理这个?

如果没有,考虑为此制作一个简单的宝石。

1 个答案:

答案 0 :(得分:1)

您检查ActiveModel::Validations::ClassMethods吗?

Ruby on Rails为验证提供了一些内置的辅助方法,你不需要为此使用gem。

对于任何类型的格式验证,您都可以将REGEXvalidates_format_of

一起使用
class Person < ActiveRecord::Base
    validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i, :on => :create
    validates_format_of :phone, with: /\A(\d{10}|\(?\d{3}\)?[-. ]\d{3}[-.]\d{4})\z/
end

您可以在没有正则表达式的情况下检查mail gem电子邮件验证。

要验证presence属性,您可以将其定义为:

class Person < ActiveRecord::Base
  validates :name, :phone, :email, presence: true
end

有许多验证方法可供选择,如:

您还可以创建自己的Custom Validators

仅供参考:要在model中使用验证,最好在controller中使用。