Class: MrCommon::ApplicationFormBuilder

Inherits:
ActionView::Helpers::FormBuilder
  • Object
show all
Defined in:
app/form/mr_common/application_form_builder.rb

Overview

Default form builder for the app. Slightly customized to provide methods for .form-group divs and error text

Instance Method Summary collapse

Instance Method Details

#_error_for_any?(methods) ⇒ Boolean

Returns:

  • (Boolean)


34
35
36
# File 'app/form/mr_common/application_form_builder.rb', line 34

def _error_for_any?(methods)
  Array[methods].flatten.find { |m| object.errors[m].any? }
end

#errors(method, options = {}) ⇒ Object

Outputs an error message tag when errors are present on the given field

<%= f.errors :email %>

=>
  <div class="error-message">is invalid</div>


45
46
47
48
49
50
51
# File 'app/form/mr_common/application_form_builder.rb', line 45

def errors(method, options = {})
  return nil unless object.errors[method].any?

  text = options.delete(:text) || object.errors[method].join(", ")
  div_classes = options.delete(:class) || "error-message"
  @template.(:div, text, class: div_classes)
end

#form_group(method_or_methods = nil, options = {}, &block) ⇒ Object

wraps a block in a .form-group div, applies an .error class when the given field has errors

 <%= f.form_group :email do %>
   <%= f.label :email %>
   <%= f.email_field :email, class: 'form-control' %>
 <% end %>

=>
 <div class="form-group">
   <label for="Registration_email">Email</label>
   <input class="form-control" value="asdf@asdfasdf" name="Registration[email]" id="Registration_email" type="email">
 </div>


21
22
23
24
25
26
27
28
29
30
31
32
# File 'app/form/mr_common/application_form_builder.rb', line 21

def form_group(method_or_methods = nil, options = {}, &block)
  div_classes = ["form-group"]
  div_classes << "required" if options[:required]
  div_classes << options.delete(:class) if options[:class]
  div_classes << "error" if _error_for_any?(method_or_methods)
  div_classes = div_classes.join(" ")


  @template.(:div, class: div_classes) do
    yield block
  end
end