Rails:如何测试模型策略中是否需要类对象的属性?

old*_*god 12 ruby ruby-on-rails

简而言之,我有一个模型User,其名称,电子邮件和评论作为属性.

validates_presence_of :name
validates_presence_of :email
Run Code Online (Sandbox Code Playgroud)

因此,'name'和'email'是必需的,但不是'comment'.

my_user = User.new
Run Code Online (Sandbox Code Playgroud)

我想找个像my_user.name.required一样测试的方法吗?或者User.name.required?之类的事情.

我的目标是创建一个表单并将一个特定的类动态添加到表单项span或td,具体取决于该项是否设置为"validates_presence_of"

我试图搜索它,但没有找到任何关于.有一个简单的方法来做到这一点?

谢谢

Che*_*sea 21

没有一种方法可以调用来处理这个问题,但是这篇文章讨论了如何创建一个帮助方法来实现它听起来像你所追求的那样.

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
Run Code Online (Sandbox Code Playgroud)

  • 对上面代码片段的两处更改:1.参数中的attr应该读为'attribute'2.我还必须将ActiveModel更改为ActiveRecord (4认同)

Dou*_*las 6

在演员的2/3处查看关于表单构建器的Railscast:

/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
Run Code Online (Sandbox Code Playgroud)