# @_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 += %(

#{note}

) if note content += %(

#{errors}

) 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 = {}) %(
)+ (submit_button string, :class => "positive") + (options[:cancel] ? link_to("Cancel", options[:cancel], :class => "cancel") : '')+ %(
) end end