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

How to get validation constraints of ApplicationRecord model in Rails?

我有一个 class 看起来像:

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

我需要一种方法 returns validationinclusion 部分用于 field 列。例如:

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

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

如果你确实想以有趣的方式Rails做到这一点:

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

那将 return 你的字段数组。

否则,虽然这不是您要找的黑魔法,但我会根据以下内容进行调整,以使其更加美观和灵活:

class Account < ApplicationRecord
  FIELD_OPTIONS = %w[foo bar baz bla].freeze

  validates :field, presence: true,
                    inclusion:{
                      in: FIELD_OPTIONS
                    }

那么您就可以通过 Account::FIELD_OPTIONS 进行简单的访问了。

有没有用?如果您有任何疑问,请告诉我它们的搭配方式。