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.
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.
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.
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
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With