【问题标题】:get validations from model从模型中获取验证
【发布时间】:2011-05-02 09:35:14
【问题描述】:

我如何获得模型中定义的验证列表

例子:

class ModelName
  validates_presence_of :field_name
  validates_inclusion_of :sex, :in => %w(M F)
end

我需要像这样的哈希:

{:field_name => 'required', :sex => 'Must be in: M, F'}

【问题讨论】:

    标签: ruby-on-rails validation activemodel


    【解决方案1】:

    看起来没有本地方法可以做到这一点,但一个快速的谷歌(用于“rails reflect validations”)出现了this plugin

    【讨论】:

    • 谢谢,看来需要
    【解决方案2】:

    你不需要一个插件来满足基本需求。

    您可以这样做来获取所有验证器的哈希值。

    ModelName.validators
    

    如果您想获取特定字段的验证器:

    ModelName.validators_on(:attribute)
    

    【讨论】:

    • 酷!它比插件更好
    • 请注意,这仅在 Rails 3 中可用。对于早期的 Rails 应用程序,插件是要走的路。
    • 如果我使用像validate :check_name_blank 这样的自定义验证方法,我怎么能得到这个在这个方法中,我正在检查名称是否存在以及其他一些东西。所以当我在做ModelName.validators_on :name 时,我得到一个空数组。
    【解决方案3】:

    如果您在模型中动态添加验证,则可以使用实例列出验证:

    product = Product.new
    product.singleton_class.validators_on(:price)
    #=> [#<ActiveModel::Validations::PresenceValidaton>]
    

    在 Rails 5.2 中测试。

    【讨论】:

      【解决方案4】:

      此代码生成一组必填字段。它应该适合您的需求。

      @required_fields = []
      ModelName.validators.each do |v|
        @required_fields << v.attributes.first if v.kind == :presence
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-05
        相关资源
        最近更新 更多