我正在为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来处理这个?
如果没有,考虑为此制作一个简单的宝石。
答案 0 :(得分:1)
您检查ActiveModel::Validations::ClassMethods吗?
Ruby on Rails为验证提供了一些内置的辅助方法,你不需要为此使用gem。
对于任何类型的格式验证,您都可以将REGEX
与validates_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
中使用。