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

时间:2011-10-20 01:01:11

标签: ruby-on-rails ruby

简单地说,我有一个模型用户,其名称,电子邮件和评论作为属性。

validates_presence_of :name
validates_presence_of :email

所以'name'和'email'是必需的,但不是'comment'。

my_user = User.new

我想找个像my_user.name.required一样测试的方法吗?或者User.name.required?那种事。

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

我试图搜索它,但没有发现任何相关信息。有一个简单的方法吗?

由于

4 个答案:

答案 0 :(得分:21)

没有一种方法可以调用来处理这个问题,但是this post讨论了如何创建一个帮助方法,这听起来就像你听到的那样。

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

答案 1 :(得分:6)

在演员阵容的2/3处查看此Railscast about form builder

<强> /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

答案 2 :(得分:0)

我没有评论,因为我没有50个代表,但是在Rails 5+上这不再起作用。您可以这样做:

ModelName.validators_on(:attribute).any? { |v| v.class == ActiveRecord::Validations::PresenceValidator }

答案 3 :(得分:-4)

如果您使用导轨3或以上,那么

validates :name, :presence => true

为什么要动态添加类? 您可以控制需要填充的属性,以便在视图表单上添加一个类,只需在items标记上添加一个类即可。