我有一个看起来像这样的课
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']
中,可能很简单,但是在这种情况下,我找不到解决方法。
答案 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
进行访问了。
有什么用吗?如果您有任何疑问,请告诉我。