Revision 644ab7ba1654 () - Diff

Link to this snippet: https://friendpaste.com/7cWIvEfFDQcNTR4kAHIzgy
Embed:
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
47
48
49
50
51
52
53
54
# @_obj isn't working anymore
module Merb::Helpers::Form::Builder
class Base
def current_obj
@obj
end
end
end


module SexyForms
def field(control, attribute, options = {})
field_class = options.delete(:field_class)
note = options.delete(:note)
required = options.delete(:required)
errors_for = options.delete(:errors_for) || attribute
options[:label] = humanize(attribute) if options[:label].blank?
errors = errors_on_attribute(errors_for)
field_classes = ["field"]
field_classes << "error" if errors.any?
field_classes << options[:field_class] if options[:field_class]
field_classes << control.to_s
field_classes << "required" if required
begin
content = send("#{control}_field", attribute, options)
rescue
content = send(control, attribute, options)
end
content += %(<p class="note">#{note}</p>) if note
content += %(<p class="error">#{errors}</p>) if errors.any?
tag :div, content, :class => field_classes.join(' ')
end

def humanize(sym)
sym.to_s.gsub(/_id$/, "").gsub(/_/, " ").gsub( /\S+/ ){|s| s.capitalize}
end
def errors_on_attribute(attribute)
[current_form_context.current_obj.errors.on(attribute)].flatten.join(' and ') rescue []
end
# Pass more_html for cancel link (or whatever)
def form_submit(string, options = {})
%(<div class="field controls">)+
(submit_button string, :class => "positive") +
(options[:cancel] ? link_to("Cancel", options[:cancel], :class => "cancel") : '')+
%(</div>)
end
end