Module: Formtastic::Helpers::ErrorsHelper

Includes:
FileColumnDetection, Reflection, LocalizedString
Included in:
FormBuilder
Defined in:
lib/formtastic/helpers/errors_helper.rb

Constant Summary collapse

INLINE_ERROR_TYPES =
[:sentence, :list, :first]

Instance Method Summary collapse

Methods included from Reflection

#reflection_for

Methods included from FileColumnDetection

#is_file?

Instance Method Details

#inline_errors_for(method, options = {}) ⇒ Object Also known as: errors_on

Deprecated.

See the README for the currently supported approach to custom inputs.

Generates error messages for the given method, used for displaying errors right near the field for data entry. Uses the ‘:inline_errors` config to determin the right presentation, which may be an ordered list, a paragraph sentence containing all errors, or a paragraph containing just the first error. If configred to `:none`, no error is shown.

See the ‘:inline_errors` config documentation for more details.

This method is mostly used internally, but can be used in your forms when creating your own custom inputs, so it’s been made public and aliased to ‘errors_on`.

Examples:

<%= semantic_form_for @post do |f| %>
  <li class='my-custom-text-input'>
    <%= f.label(:body) %>
    <%= f.text_field(:body) %>
    <%= f.errors_on(:body) %>
  </li>
<% end %>


78
79
80
81
82
83
84
85
86
# File 'lib/formtastic/helpers/errors_helper.rb', line 78

def inline_errors_for(method, options = {})
  ActiveSupport::Deprecation.warn('inline_errors_for and errors_on are deprecated and will be removed on or after version 2.1', caller)
  if render_inline_errors?
    errors = error_keys(method, options).map{|x| @object.errors[x] }.flatten.compact.uniq
    send(:"error_#{inline_errors}", [*errors], options) if errors.any?
  else
    nil
  end
end

#semantic_errors(*args) ⇒ Object

Generates an unordered list of error messages on the base object and optionally for a given set of named attribute. This is idea for rendering a block of error messages at the top of the form for hidden/special/virtual attributes (the Paperclip Rails plugin does this), or errors on the base model.

A hash can be used as the last set of arguments to pass HTML attributes to the ‘<ul>` wrapper.

Examples:

A list of errors on the base model

<%= semantic_form_for ... %>
  <%= f.semantic_errors %>
  ...
<% end %>

A list of errors on the base and named attributes

<%= semantic_form_for ... %>
  <%= f.semantic_errors :something_special %>
  ...
<% end %>

A list of errors on the base model, with custom HTML attributes

<%= semantic_form_for ... %>
  <%= f.semantic_errors :class => "awesome" %>
  ...
<% end %>

A list of errors on the base model and named attributes, with custom HTML attributes

<%= semantic_form_for ... %>
  <%= f.semantic_errors :something_special, :something_else, :class => "awesome", :onclick => "Awesome();" %>
  ...
<% end %>


41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/formtastic/helpers/errors_helper.rb', line 41

def semantic_errors(*args)
  html_options = args.extract_options!
  full_errors = args.inject([]) do |array, method|
    attribute = localized_string(method, method.to_sym, :label) || humanized_attribute_name(method)
    errors = Array(@object.errors[method.to_sym]).to_sentence
    errors.present? ? array << [attribute, errors].join(" ") : array ||= []
  end
  full_errors << @object.errors[:base]
  full_errors.flatten!
  full_errors.compact!
  return nil if full_errors.blank?
  html_options[:class] ||= "errors"
  template.(:ul, html_options) do
    Formtastic::Util.html_safe(full_errors.map { |error| template.(:li, Formtastic::Util.html_safe(error)) }.join)
  end
end