Подтвердить что ты не робот

Rails: как проверить, требуется ли атрибут объекта класса в политике модели?

Вкратце, у меня есть модель User с именем, адресом электронной почты и комментариями как атрибуты.

validates_presence_of :name
validates_presence_of :email

Так что "имя" и "электронная почта" требуются, но не "комментарий".

my_user = User.new

Я бы хотел найти способ тестирования, например my_user.name.required? или User.name.required? вид вещи.

Моя цель - создать форму и добавить динамический класс к диапазону элемента формы или td в зависимости от того, установлен ли этот элемент как "validates_presence_of"

Я попытался найти его, но ничего не нашел. Есть ли простой способ сделать это?

Спасибо

4b9b3361

Ответ 1

Существует не один метод, который вы можете вызвать для этого, но этот пост говорит о создании вспомогательного метода, чтобы сделать это похоже, что вы после.

module InputHelper 
  def required?(obj, attribute)
    target = (obj.class == Class) ? obj : obj.class
    target.validators_on(attribute)
          .map(&:class)
          .include?(ActiveModel::Validations::PresenceValidator)
  end
end

Ответ 2

Посмотрите Railscast о построителе форм в 2/3 из списка:

/app/form_builders_labelled_form_builder.rb

def field_label(name, *args)
  options = args.extract_options!
  required = object.class.validators_on(name).any? { |v| v.kind_of? ActiveModel::Validations::PresenceValidator }
  label(name, options[:label], class: ("required" if required))
end

Ответ 3

Хорошо, если вы используете рельсы 3 или выше, вы можете сделать

validates :name, :presence => true

и почему вы хотите добавить класс динамически? Вы контролируете, какие атрибуты должны быть заполнены так в форме представления, просто добавьте класс в тег элементов для тех, которые требуются.