使用星号自动标记必填字段,不起作用

时间:2013-05-17 09:58:19

标签: ruby-on-rails ruby mongoid

我正在尝试检测mongoid模型中的必填字段,以便在视图中的标签后添加标记。这是我正在使用的初始化程序。请注意,Mongoid唯一不同的是Mongoid::Validations::PresenceValidator,在ActiveRecord中会ActiveModel::Validations::PresenceValidator,所以也许它不是与mongoid相关的问题(?):

class ActionView::Helpers::FormBuilder
  alias :orig_label :label

  # add a 'required' CSS class to the field label if the field is required
  def label(method, content_or_options = nil, options = nil, &block)
    if content_or_options && content_or_options.class == Hash
      options = content_or_options
    else
      content = content_or_options
    end

    if object.class.validators_on(method).map(&:class).include? Mongoid::Validations::PresenceValidator

      if options.class != Hash
        options = {:class => "required"}
      else
        options[:class] = ((options[:class] || "") + " required").split(" ").uniq.join(" ")
      end
    end

    self.orig_label(method, content, options || {}, &block)
  end
end

另外,我正在使用这种风格,以便在lable.required中包含一个星号:

 /* add required field asterisk */
 label.required:after {
     content: " *";
 }

如果我手动在标签中设置了所需的类,则会成功显示。问题是FormBuilder根本没有修改标签,也没有显示标记。似乎文件根本没有使用,我将它作为初始化程序包含在内,但事件写入一个简单的puts "I am here..."它没有显示在服务器控制台中。

我错过了什么?

提前感谢您的回答。

2 个答案:

答案 0 :(得分:1)

我有同样的问题,也许可能是你的rails版本。

“在Rails 4中,验证类已更改为ActiveRecord。因此,使用ActiveRecord :: Validations :: PresenceValidator替换ActiveModel :: Validations :: PresenceValidator应该可以解决问题。”

来源:http://blog.pothoven.net/2012/10/self-marking-required-fields-in-rails.html

答案 1 :(得分:0)

尝试扩展

module ActionView::Helpers::FormHelper