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] = Inflector.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 if options[:name] content = send("#{control}_field", options) else content = send("#{control}_control", attribute, options) end content += %(

#{note}

) if note content += %(

#{errors}

) if errors.any? tag :div, content, :class => field_classes.join(' ') end def errors_on_attribute(attribute) # @_obj comes automagically from merb [@_obj.errors[attribute.to_s]].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