Documentation : Customizing the Form

Active Admin gives complete control over the output of the form by creating a thin DSL on top of the fabulous DSL created by Formtastic.

  ActiveAdmin.register Post do

    form do |f|
      f.inputs "Details" do
        f.input :title
        f.input :published_at, :label => "Publish Post At"
        f.input :category
      end
      f.inputs "Content" do
        f.input :body
      end
      f.actions
    end

  end

Please view the documentation for Formtastic to see all the wonderful things you can do.

If you require a more custom form than can be provided through the DSL, you can pass a partial in to render the form yourself.

For example:

  ActiveAdmin.register Post do
    form :partial => "form"
  end

Then implement app/views/admin/posts/_form.html.erb:

  <%= semantic_form_for [:admin, @post] do |f| %>
    <%= f.inputs :title, :body %>
    <%= f.actions :commit %>
  <% end %>

Nested Resources

You can create forms with nested models using the has_many method:

  ActiveAdmin.register Post do

    form do |f|
      f.inputs "Details" do
        f.input :title
        f.input :published_at, :label => "Publish Post At"
      end
      f.inputs "Content" do
        f.input :body
      end
      f.inputs do
        f.has_many :categories, :allow_destroy => true, :heading => 'Themes', :new_record => false do |cf|
          cf.input :title
        end
      end
      f.actions
    end

  end

The :allow_destroy option will add a checkbox to the end of the nested form allowing removal of the child object upon submission. Be sure to set :allow_destroy => true on the association to use this option.

The :heading option will add a custom heading to has_many form. You can hide a heading by setting :heading => false.

The :new_record option will show or hide new record link at the bottom of has_many form. It is set as true by default.

Displaying Errors

To display a list of all errors, include semantic_errors at top of form. Particularly useful to display errors on the base or virtual attributes.

  form do |f|
    f.semantic_errors *f.object.errors.keys
    f.inputs
    f.buttons
  end
Copyright 2011 Greg Bell and VersaPay