-
Notifications
You must be signed in to change notification settings - Fork 0
/
labeled_form_builder.rb
46 lines (40 loc) · 1.3 KB
/
labeled_form_builder.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
class LabeledFormBuilder < ActionView::Helpers::FormBuilder
%w(text_field collection_select text_area password_field).each do |method|
define_method(method) do |field_name, *args|
paragraph_tag(method) do
label(field_name, *args) + "<br />" + super(field_name, *args)
end
end
end
def check_box(field_name, *args)
paragraph_tag('check_box') do
super(field_name, *args) + " " + label(field_name, *args)
end
end
def submit(*args)
paragraph_tag('submit') do
super(*args)
end
end
def check_boxes(name, objects, id_method, name_method, options = {})
paragraph_tag('check_boxes') do
field_name = "#{object_name}[#{name}][]"
objects.map do |object|
@template.check_box_tag(
field_name,
object.send(id_method),
object.send(name_method).include?(object.send(id_method))
) + " " + object.send(name_method)
end.join("<br />") + @template.hidden_field_tag(field_name, "")
end
end
private
def label(field, *args)
options = args.extract_options!
options[:label_class] = "required" if options[:required]
super(field, options[:label], :class => options[:label_class])
end
def paragraph_tag(field_name, &block)
@template.content_tag(:p, { :class => field_name }, &block)
end
end