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

时间:2019-01-28 18:02:05

标签: ruby-on-rails ruby rails-activerecord

我有一个看起来像这样的课

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

我需要一个方法,该方法返回inclusion列的validation的{​​{1}}部分。例如:

field

是否存在类似的东西?如果它位于data = Account.validations_for(:field) # Or some similar magick method data[:inclusion][:in] # => ['foo', 'bar', 'baz', 'bla'] 中,可能很简单,但是在这种情况下,我找不到解决方法。

1 个答案:

答案 0 :(得分:1)

如果您确实想通过有趣的Rails方式做到这一点:

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进行访问了。

有什么用吗?如果您有任何疑问,请告诉我。