代码之家  ›  专栏  ›  技术社区  ›  EmmanuelB

如何在Rails中获取applicationrecord模型的验证约束?

  •  0
  • EmmanuelB  · 技术社区  · 6 年前

    我有一门课看起来像:

    class Account < ApplicationRecord
      validates :field, presence: true,
                        inclusion:{
                          in: %w[foo bar baz bla]
                        }
    end
    

    我需要一个返回 inclusion 部分 validation 对于 field 列。例如。:

    data = Account.validations_for(:field) # Or some similar magick method
    data[:inclusion][:in] # => ['foo', 'bar', 'baz', 'bla']
    

    类似的东西存在吗?如果是在 enum 这可能很简单,但在这种情况下我找不到方法。

    1 回复  |  直到 6 年前
        1
  •  1
  •   SRack    6 年前

    如果你真的想这样做,有趣的轨道方式:

    Account.validators_on(:field).detect { |validator| validator.is_a? ActiveModel::Validations::InclusionValidator }.options[:in]
    

    这将返回一个字段数组。

    否则,虽然这不是你要找的黑魔法,但我会调整到以下几点,使其更漂亮、更灵活:

    class Account < ApplicationRecord
      FIELD_OPTIONS = %w[foo bar baz bla].freeze
    
      validates :field, presence: true,
                        inclusion:{
                          in: FIELD_OPTIONS
                        }
    

    然后你就可以通过 Account::FIELD_OPTIONS .

    有什么用吗?如果您有任何问题,请告诉我它们的适合程度。