Created
May 2, 2012 08:10
-
-
Save fred/2574969 to your computer and use it in GitHub Desktop.
extend active admin to prettier boolean values
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# It extends activeadmin to show pretty boolean values | |
# | |
# config/initializers/active_admin.rb | |
module ActiveAdmin | |
module Views | |
class TableFor | |
def bool_column(attribute) | |
column(attribute){ |model| model[attribute] ? '✔'.html_safe : '✗'.html_safe } | |
end | |
end | |
class AttributesTable | |
def bool_row(attribute) | |
row(attribute){ |model| model[attribute] ? '✔'.html_safe : '✗'.html_safe } | |
end | |
end | |
end | |
end | |
# example | |
# app/admin/user.rb | |
ActiveAdmin.register User do | |
index do | |
column :name | |
column :email | |
bool_column :admin | |
end | |
show do | |
attributes_table do | |
row :name | |
row :email | |
bool_row :admin | |
end | |
end | |
end |
Forgot to mention, also added an IndexAsTable class to the Views module to work with ActiveAdmin 0.5.1
class IndexAsTable
def bool_column(attribute)
column(attribute){ |model| model[attribute] ? '✔'.html_safe : '✗'.html_safe }
end
end
Thanks very helpful. I was looking for it.
I would suggest the following edit (though honestly not 100% that args.last
always returns the attribute:
module ActiveAdmin
module Views
class TableFor
def bool_column(*args)
column(*args){ |model| model[args.last] ? '✔'.html_safe : '✗'.html_safe }
end
end
class AttributesTable
def bool_row(*args)
row(*args){ |model| model[args.last] ? '✔'.html_safe : '✗'.html_safe }
end
end
end
end
I ran into the need for this with renaming columns like bool_column 'Paid?', :is_paid
.
And use this code if you just want to show the booleans with status_tag
in AttributesTable view (no need of changing column
methods to bool_column
:
ActiveAdmin::Views::AttributesTable.class_eval do
def content_for(record, attr)
value = find_attr_value(record, attr)
if is_boolean?(attr, record)
value = status_tag(value)
else
value = pretty_format(value)
end
value.blank? && current_arbre_element.children.to_s.empty? ? empty_value : value
end
def is_boolean?(data, item)
if item.respond_to? :has_attribute?
item.has_attribute?(data) &&
item.column_for_attribute(data) &&
item.column_for_attribute(data).type == :boolean
end
end
end
its really helpful....i am looking for it from last two days
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Very handy, and easy to appreciate. Thanks.