如何返回将通过验证的项目列表

时间:2017-02-21 03:29:09

标签: ruby-on-rails ruby tdd

我有一个Outlet模型,它包含一个允许两个值的包含验证,并且我会扩展以获得更多值。

我想知道是否还有一个方法可以返回我在包含验证中使用的值数组?

.directive('tabPanel', function () {
    return {
        scope: {
            isOpen: '='
        },
        template: '<div><div tab-content is-open="isOpen"></div>',
        //...
    };
})

1 个答案:

答案 0 :(得分:2)

ActiveModel类方法validators_on将返回给定字段的所有验证程序。 E.g:

Outlet.validators_on(:category)
#=> [#<ActiveRecord::Validations::PresenceValidator:0x007fd2350e4b88 ...>, #<ActiveModel::Validations::InclusionValidator:0x007fd23a872cd8 ...>]

它允许获得这样的包含值:

Outlet.validators_on(:category)
  .find { |validator| validator.is_a?(ActiveModel::Validations::InclusionValidator) }
  .options[:in]

它将返回一系列选项。

但实现相同目标的更简洁方法是提取类常量的选项:

class Outlet < ApplicationRecord
  ALLOWED_CATEGORIES = %w(vent rant qualm).freeze

  # ...

  validates :category, inclusion: { in: ALLOWED_CATEGORIES }
end

然后通过Outlet::ALLOWED_CATEGORIES

访问允许的值