Validation Reflection

本文深入解析了为何在软件开发领域,大多数程序员未能晋升为架构师的原因,并通过示例代码展示了如何使用Ruby on Rails框架进行验证方法的反射操作,包括获取验证对象ID及属性等关键信息。

本插件提供两个 ‘类’ 方法

  • ModelClass.reflect_on_all_validations
  • ModelClass.reflect_on_validations_for(:property)

返回的是其所校验的对象 id (以数组的形式)和该所对就的 属性 例如:


 class Person < ActiveRecord::Base
    validates_presence_of :name
    validates_numericality_of :size, :only_integer => true
  end

  refl = Person.reflect_on_validations_for(:name)
  refl[0].macro
  # => :validates_presence_of
  
  refl = Person.reflect_on_validations_for(:size)
  refl[0].macro
  # => :validates_numericality_of
  refl[0].options
  # => { :only_integer => true }

这是源代码里对这两个方法的定义


module ClassMethods

    include ::ValidationReflection

    # Returns an array of MacroReflection objects for all validations in the class
    def reflect_on_all_validations
      self.read_inheritable_attribute(:reflected_validations) || []
    end

    # Returns an array of MacroReflection objects for all validations defined for the field +attr_name+.
    def reflect_on_validations_for(attr_name)
      self.reflect_on_all_validations.select do |reflection|
        reflection.name == attr_name.to_sym
      end
    end

转载于:https://my.oschina.net/kelby/blog/193050

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值