Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Active admin customization

I have an Event model with field status, which is string so it appears as a text_field. But I have a list of possible statuses and I want to display it as a select box. Also, when I select cancel status for a event it should ask me for the cancellation reason. I am not able to find good tutorial for this.

like image 904
Pravin Avatar asked Nov 29 '11 12:11

Pravin


People also ask

What is active admin in Ruby?

Active Admin is a Ruby on Rails plugin for generating administration style interfaces. It abstracts common business application patterns to make it simple for developers to implement beautiful and elegant interfaces with very little effort.

How do I use Active Admin?

Run the generator to install Active Admin. This will create an AdminUser model, an initializer file for configuring Active Admin and an app/admin directory that will hold the administration files. It uses Devise for authentication.


2 Answers

Following is the example almost all customizations :)

ActiveAdmin.register Event do
  #Menu display index
  menu :priority => 1

  #Scopes
  scope :all
  scope :pending
  scope :approved
  scope :rejected
  scope :cancelled
  scope :featured

  #Filters  
  filter :city
  filter :user, :content_columns => :first_name
  filter :name
  filter :featured
  filter :location
  filter :details
  filter :start_datetime
  filter :end_datetime

  # New/Edit forms  
  form do |f|
    f.inputs do
      f.input :status, :label => "Event Status", :as => :select, :collection => Event::EVENT_STATUSES
      # Conditional show/hide using js
      cancel_reason_style = f.object.cancelled? ? "display:block" : "display:none"
      reject_reason_style = f.object.rejected? ? "display:block" : "display:none"
      f.input :reject_reason, :wrapper_html => {:style => reject_reason_style}, :hint => "Required if status event rejected"
      f.input :cancel_reason, :wrapper_html => {:style => cancel_reason_style}, :hint => "Required if status event rejected"
      f.input :city, :label => "Event Status"
      f.input :name, :label => "Name"
      f.input :image, :as => :file, :hint => f.template.image_tag(f.object.image.url(:medium))
      f.input :details, :input_html => { :class => 'autogrow', :rows => 5, :cols => 30, :maxlength => 10  }
      f.input :start_datetime
      f.input :end_datetime
      f.input :location, :input_html => { :class => 'autogrow', :rows => 5, :cols => 30, :maxlength => 10  }
      f.input :gmap_lattitude
      f.input :gmap_logitude
      f.input :email
      f.input :mobile
      f.input :website
    end
    f.buttons
  end

  index do
    column :name
    column :user
    column :city
    column :status
    column :start_datetime
#    column :end_datetime
    column :email
    default_actions
  end

  show do |event|
    attributes_table do
      row :name
      row :details
      row :user
      row :city
      row :status do event.status.titleize end
      # has_many :through
      row :themes do
        event.themes.collect{|t| t.name}.join(', ')
      end
      row :event_type do
        event.event_types.collect{|t| t.name}.join(', ')
      end
      row :start_datetime
      row :end_datetime
      row :location
      row :gmap_lattitude
      row :gmap_logitude
      row :email
      row :mobile
      row :created_at
      row :updated_at

    end
    active_admin_comments
  end

end

EDIT There are a few themes available

https://github.com/vigetlabs/active_material

https://github.com/activeadmin-plugins/active_admin_theme

https://github.com/paladini/activeadmin-themes

like image 116
Pravin Avatar answered Sep 20 '22 06:09

Pravin


ActiveAdmin uses Formtastic for form generation, so Formtastic's documentation should answer your questions.

You can get a select instead of a textfield with the following code:

form do |f|
  f.status, :as => :select, :collection => STATUSES #whatever collection you want to display
end

Triggering an event when selecting "cancelled" should be solved with javascript.

like image 33
bruno077 Avatar answered Sep 19 '22 06:09

bruno077