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"
Я попытался найти его, но ничего не нашел. Есть ли простой способ сделать это?
Спасибо
Ответы
Ответ 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
и почему вы хотите добавить класс динамически?
Вы контролируете, какие атрибуты должны быть заполнены так в форме представления, просто добавьте класс в тег элементов для тех, которые требуются.