Как получить проверочные ограничения модели ApplicationRecord в Rails? - PullRequest
0 голосов
/ 28 января 2019

У меня есть класс, который выглядит следующим образом:

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 Ответ

0 голосов
/ 28 января 2019

Если вы хотите сделать это забавным способом 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.

Либолюбое использование?Дайте мне знать, как они подходят / если у вас есть какие-либо вопросы.

...