Skip HTML escape in custom label_tag helper in Rail 3

Posted by tricote on Stack Overflow See other posts from Stack Overflow or by tricote
Published on 2010-05-27T18:05:38Z Indexed on 2010/05/30 1:32 UTC
Read the original article Hit count: 286

Filed under:
|
|

Hi,

I have this nice class ErrorFormBuilder that allows me to add the error description near the corresponding field in the form view :

    class ErrorFormBuilder < ActionView::Helpers::FormBuilder
  #Adds error message directly inline to a form label
  #Accepts all the options normall passed to form.label as well as:
  #  :hide_errors - true if you don't want errors displayed on this label
  #  :additional_text - Will add additional text after the error message or after the label if no errors
  def label(method, text = nil, options = {})
    #Check to see if text for this label has been supplied and humanize the field name if not.
    text = text || method.to_s.humanize
    #Get a reference to the model object
    object = @template.instance_variable_get("@#{@object_name}")

    #Make sure we have an object and we're not told to hide errors for this label
    unless object.nil? || options[:hide_errors]
      #Check if there are any errors for this field in the model
      errors = object.errors.on(method.to_sym)
      if errors
        #Generate the label using the text as well as the error message wrapped in a span with error class
        text += " <br/><span class=\"error\">#{errors.is_a?(Array) ? errors.first : errors}</span>"
      end
    end
    #Add any additional text that might be needed on the label
    text += " #{options[:additional_text]}" if options[:additional_text]
    #Finally hand off to super to deal with the display of the label
    super(method, text, options)
  end
end

But the HTML :

text += " <br/><span class=\"error\">#{errors.is_a?(Array) ? errors.first : errors}</span>"

is escaped by default in the view... I tried to add the {:escape => false} option :

super(method, text, options.merge({:escape => false}))

without success

Is there any way to bypass this behavior ?

Thanks

© Stack Overflow or respective owner

Related posts about ruby

Related posts about ruby-on-rails3