activeadmin 2.6.1 → 3.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +438 -9
- data/CONTRIBUTING.md +12 -36
- data/README.md +8 -8
- data/app/assets/javascripts/active_admin/base.js +27 -25
- data/app/assets/stylesheets/active_admin/_base.scss +53 -37
- data/app/assets/stylesheets/active_admin/_forms.scss +2 -13
- data/app/assets/stylesheets/active_admin/_header.scss +37 -3
- data/app/assets/stylesheets/active_admin/_normalize.scss +25 -123
- data/app/assets/stylesheets/active_admin/components/_comments.scss +2 -2
- data/app/assets/stylesheets/active_admin/components/_date_picker.scss +1 -2
- data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +7 -5
- data/app/assets/stylesheets/active_admin/components/_pagination.scss +5 -2
- data/app/assets/stylesheets/active_admin/components/_table_tools.scss +9 -6
- data/app/assets/stylesheets/active_admin/components/_tabs.scss +10 -7
- data/app/assets/stylesheets/active_admin/mixins/_buttons.scss +2 -2
- data/app/assets/stylesheets/active_admin/mixins/_variables.scss +12 -0
- data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +1 -1
- data/app/assets/stylesheets/active_admin/structure/_footer.scss +6 -1
- data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +6 -4
- data/app/javascript/active_admin/initializers/has-many.js +4 -1
- data/app/javascript/active_admin/initializers/per-page.js +1 -1
- data/app/javascript/active_admin/lib/checkbox-toggler.js +3 -3
- data/app/javascript/active_admin/lib/dropdown-menu.js +1 -1
- data/app/javascript/active_admin/lib/modal-dialog.js +7 -7
- data/app/javascript/active_admin/lib/per-page.js +1 -1
- data/app/javascript/active_admin/lib/table-checkbox-toggler.js +1 -1
- data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
- data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +2 -2
- data/app/views/active_admin/devise/shared/_links.erb +1 -1
- data/app/views/active_admin/page/index.html.arb +1 -0
- data/app/views/active_admin/resource/edit.html.arb +1 -0
- data/app/views/active_admin/resource/index.html.arb +1 -0
- data/app/views/active_admin/resource/new.html.arb +1 -0
- data/app/views/active_admin/resource/show.html.arb +1 -0
- data/app/views/layouts/active_admin.html.arb +1 -0
- data/app/views/layouts/active_admin_logged_out.html.erb +18 -7
- data/config/locales/ar.yml +6 -13
- data/config/locales/az.yml +0 -7
- data/config/locales/bg.yml +0 -7
- data/config/locales/bs.yml +0 -7
- data/config/locales/ca.yml +0 -7
- data/config/locales/cs.yml +0 -7
- data/config/locales/da.yml +0 -7
- data/config/locales/de-CH.yml +0 -7
- data/config/locales/de.yml +0 -8
- data/config/locales/el.yml +0 -7
- data/config/locales/en-CA.yml +0 -7
- data/config/locales/en-GB.yml +0 -7
- data/config/locales/en.yml +0 -8
- data/config/locales/eo.yml +0 -8
- data/config/locales/es-MX.yml +2 -8
- data/config/locales/es.yml +2 -10
- data/config/locales/fa.yml +0 -7
- data/config/locales/fi.yml +0 -7
- data/config/locales/fr.yml +3 -11
- data/config/locales/he.yml +0 -9
- data/config/locales/hr.yml +0 -7
- data/config/locales/hu.yml +0 -8
- data/config/locales/id.yml +0 -7
- data/config/locales/it.yml +18 -8
- data/config/locales/ja.yml +2 -10
- data/config/locales/ko.yml +1 -8
- data/config/locales/lt.yml +0 -8
- data/config/locales/lv.yml +0 -7
- data/config/locales/mk.yml +0 -8
- data/config/locales/nb.yml +0 -8
- data/config/locales/nl.yml +1 -9
- data/config/locales/pl.yml +0 -8
- data/config/locales/pt-BR.yml +0 -8
- data/config/locales/pt-PT.yml +0 -7
- data/config/locales/ro.yml +3 -9
- data/config/locales/ru.yml +0 -6
- data/config/locales/sk.yml +0 -8
- data/config/locales/sv-SE.yml +58 -39
- data/config/locales/tr.yml +0 -11
- data/config/locales/uk.yml +0 -6
- data/config/locales/vi.yml +38 -19
- data/config/locales/zh-CN.yml +34 -23
- data/config/locales/zh-TW.yml +0 -7
- data/lib/active_admin/abstract_view_factory.rb +1 -0
- data/lib/active_admin/application.rb +19 -19
- data/lib/active_admin/application_settings.rb +4 -3
- data/lib/active_admin/asset_registration.rb +4 -3
- data/lib/active_admin/authorization_adapter.rb +6 -3
- data/lib/active_admin/base_controller/authorization.rb +15 -13
- data/lib/active_admin/base_controller/menu.rb +1 -0
- data/lib/active_admin/base_controller.rb +6 -5
- data/lib/active_admin/batch_actions/controller.rb +4 -3
- data/lib/active_admin/batch_actions/resource_extension.rb +10 -8
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +4 -3
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +7 -6
- data/lib/active_admin/batch_actions/views/selection_cells.rb +4 -3
- data/lib/active_admin/batch_actions.rb +1 -0
- data/lib/active_admin/callbacks.rb +1 -0
- data/lib/active_admin/cancan_adapter.rb +2 -1
- data/lib/active_admin/collection_decorator.rb +32 -0
- data/lib/active_admin/component.rb +1 -0
- data/lib/active_admin/controller_action.rb +1 -0
- data/lib/active_admin/csv_builder.rb +25 -17
- data/lib/active_admin/dependency.rb +12 -15
- data/lib/active_admin/devise.rb +16 -5
- data/lib/active_admin/dsl.rb +2 -1
- data/lib/active_admin/dynamic_setting.rb +1 -0
- data/lib/active_admin/dynamic_settings_node.rb +3 -2
- data/lib/active_admin/engine.rb +17 -9
- data/lib/active_admin/error.rb +1 -2
- data/lib/active_admin/filters/active.rb +2 -1
- data/lib/active_admin/filters/active_filter.rb +6 -6
- data/lib/active_admin/filters/active_sidebar.rb +4 -30
- data/lib/active_admin/filters/dsl.rb +1 -0
- data/lib/active_admin/filters/forms.rb +9 -8
- data/lib/active_admin/filters/formtastic_addons.rb +3 -7
- data/lib/active_admin/filters/resource_extension.rb +6 -5
- data/lib/active_admin/filters.rb +8 -7
- data/lib/active_admin/form_builder.rb +25 -20
- data/lib/active_admin/generators/boilerplate.rb +2 -1
- data/lib/active_admin/helpers/collection.rb +2 -0
- data/lib/active_admin/helpers/i18n.rb +1 -0
- data/lib/active_admin/helpers/optional_display.rb +3 -2
- data/lib/active_admin/helpers/routes/url_helpers.rb +1 -0
- data/lib/active_admin/helpers/scope_chain.rb +1 -0
- data/lib/active_admin/inputs/datepicker_input.rb +2 -1
- data/lib/active_admin/inputs/filters/base/search_method_select.rb +7 -6
- data/lib/active_admin/inputs/filters/base.rb +2 -1
- data/lib/active_admin/inputs/filters/boolean_input.rb +2 -1
- data/lib/active_admin/inputs/filters/check_boxes_input.rb +2 -1
- data/lib/active_admin/inputs/filters/date_picker_input.rb +1 -0
- data/lib/active_admin/inputs/filters/date_range_input.rb +3 -2
- data/lib/active_admin/inputs/filters/numeric_input.rb +2 -1
- data/lib/active_admin/inputs/filters/select_input.rb +5 -2
- data/lib/active_admin/inputs/filters/string_input.rb +2 -1
- data/lib/active_admin/inputs/filters/text_input.rb +1 -0
- data/lib/active_admin/inputs.rb +1 -0
- data/lib/active_admin/localizers/resource_localizer.rb +4 -3
- data/lib/active_admin/localizers.rb +2 -1
- data/lib/active_admin/menu.rb +8 -3
- data/lib/active_admin/menu_collection.rb +1 -0
- data/lib/active_admin/menu_item.rb +8 -7
- data/lib/active_admin/namespace.rb +16 -15
- data/lib/active_admin/namespace_settings.rb +9 -5
- data/lib/active_admin/order_clause.rb +2 -1
- data/lib/active_admin/orm/active_record/comments/comment.rb +12 -3
- data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +1 -0
- data/lib/active_admin/orm/active_record/comments/resource_helper.rb +1 -0
- data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +1 -0
- data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +21 -20
- data/lib/active_admin/orm/active_record/comments/views.rb +3 -2
- data/lib/active_admin/orm/active_record/comments.rb +28 -27
- data/lib/active_admin/orm/active_record.rb +2 -1
- data/lib/active_admin/orm/mongoid.rb +1 -0
- data/lib/active_admin/page.rb +2 -1
- data/lib/active_admin/page_controller.rb +1 -0
- data/lib/active_admin/page_dsl.rb +1 -0
- data/lib/active_admin/page_presenter.rb +1 -0
- data/lib/active_admin/pundit_adapter.rb +58 -16
- data/lib/active_admin/resource/action_items.rb +6 -5
- data/lib/active_admin/resource/attributes.rb +9 -1
- data/lib/active_admin/resource/belongs_to.rb +3 -2
- data/lib/active_admin/resource/controllers.rb +2 -1
- data/lib/active_admin/resource/includes.rb +1 -0
- data/lib/active_admin/resource/menu.rb +5 -4
- data/lib/active_admin/resource/model.rb +1 -0
- data/lib/active_admin/resource/naming.rb +5 -4
- data/lib/active_admin/resource/ordering.rb +1 -0
- data/lib/active_admin/resource/page_presenters.rb +1 -0
- data/lib/active_admin/resource/pagination.rb +1 -0
- data/lib/active_admin/resource/routes.rb +6 -7
- data/lib/active_admin/resource/scope_to.rb +8 -7
- data/lib/active_admin/resource/scopes.rb +1 -0
- data/lib/active_admin/resource/sidebars.rb +2 -1
- data/lib/active_admin/resource.rb +20 -19
- data/lib/active_admin/resource_collection.rb +1 -0
- data/lib/active_admin/resource_controller/action_builder.rb +1 -0
- data/lib/active_admin/resource_controller/data_access.rb +31 -5
- data/lib/active_admin/resource_controller/decorators.rb +7 -28
- data/lib/active_admin/resource_controller/polymorphic_routes.rb +1 -0
- data/lib/active_admin/resource_controller/resource_class_methods.rb +1 -0
- data/lib/active_admin/resource_controller/scoping.rb +1 -0
- data/lib/active_admin/resource_controller/sidebars.rb +1 -0
- data/lib/active_admin/resource_controller/streaming.rb +9 -7
- data/lib/active_admin/resource_controller.rb +13 -11
- data/lib/active_admin/resource_dsl.rb +11 -25
- data/lib/active_admin/router.rb +1 -0
- data/lib/active_admin/scope.rb +7 -6
- data/lib/active_admin/settings_node.rb +1 -0
- data/lib/active_admin/sidebar_section.rb +1 -0
- data/lib/active_admin/version.rb +2 -1
- data/lib/active_admin/view_factory.rb +18 -17
- data/lib/active_admin/view_helpers/active_admin_application_helper.rb +1 -0
- data/lib/active_admin/view_helpers/auto_link_helper.rb +2 -1
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +4 -3
- data/lib/active_admin/view_helpers/display_helper.rb +23 -8
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +2 -1
- data/lib/active_admin/view_helpers/fields_for.rb +3 -2
- data/lib/active_admin/view_helpers/flash_helper.rb +1 -0
- data/lib/active_admin/view_helpers/form_helper.rb +1 -0
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +1 -0
- data/lib/active_admin/view_helpers/scope_name_helper.rb +1 -0
- data/lib/active_admin/view_helpers/sidebar_helper.rb +1 -0
- data/lib/active_admin/view_helpers/title_helper.rb +1 -0
- data/lib/active_admin/view_helpers/view_factory_helper.rb +1 -0
- data/lib/active_admin/view_helpers.rb +2 -1
- data/lib/active_admin/views/action_items.rb +1 -0
- data/lib/active_admin/views/components/active_admin_form.rb +8 -11
- data/lib/active_admin/views/components/active_filters_sidebar_content.rb +59 -0
- data/lib/active_admin/views/components/attributes_table.rb +6 -5
- data/lib/active_admin/views/components/blank_slate.rb +2 -1
- data/lib/active_admin/views/components/columns.rb +1 -0
- data/lib/active_admin/views/components/dropdown_menu.rb +7 -9
- data/lib/active_admin/views/components/index_list.rb +4 -3
- data/lib/active_admin/views/components/menu.rb +2 -1
- data/lib/active_admin/views/components/menu_item.rb +5 -4
- data/lib/active_admin/views/components/paginated_collection.rb +19 -18
- data/lib/active_admin/views/components/panel.rb +2 -1
- data/lib/active_admin/views/components/scopes.rb +8 -5
- data/lib/active_admin/views/components/sidebar.rb +1 -0
- data/lib/active_admin/views/components/sidebar_section.rb +1 -0
- data/lib/active_admin/views/components/site_title.rb +2 -1
- data/lib/active_admin/views/components/status_tag.rb +12 -11
- data/lib/active_admin/views/components/table_for.rb +18 -17
- data/lib/active_admin/views/components/tabs.rb +4 -3
- data/lib/active_admin/views/components/unsupported_browser.rb +1 -0
- data/lib/active_admin/views/footer.rb +3 -1
- data/lib/active_admin/views/header.rb +3 -2
- data/lib/active_admin/views/index_as_block.rb +1 -0
- data/lib/active_admin/views/index_as_blog.rb +2 -1
- data/lib/active_admin/views/index_as_grid.rb +2 -1
- data/lib/active_admin/views/index_as_table.rb +16 -19
- data/lib/active_admin/views/pages/base.rb +17 -11
- data/lib/active_admin/views/pages/form.rb +1 -0
- data/lib/active_admin/views/pages/index.rb +15 -13
- data/lib/active_admin/views/pages/layout.rb +1 -0
- data/lib/active_admin/views/pages/page.rb +1 -0
- data/lib/active_admin/views/pages/show.rb +2 -7
- data/lib/active_admin/views/tabbed_navigation.rb +3 -2
- data/lib/active_admin/views/title_bar.rb +2 -1
- data/lib/active_admin/views.rb +2 -1
- data/lib/active_admin.rb +63 -61
- data/lib/activeadmin.rb +2 -1
- data/lib/generators/active_admin/assets/assets_generator.rb +3 -2
- data/lib/generators/active_admin/assets/templates/active_admin.scss +2 -2
- data/lib/generators/active_admin/devise/devise_generator.rb +6 -5
- data/lib/generators/active_admin/install/install_generator.rb +15 -8
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +27 -3
- data/lib/generators/active_admin/install/templates/dashboard.rb +1 -0
- data/lib/generators/active_admin/page/page_generator.rb +2 -1
- data/lib/generators/active_admin/page/templates/page.rb +1 -0
- data/lib/generators/active_admin/resource/resource_generator.rb +4 -3
- data/lib/generators/active_admin/webpacker/plugins/jquery.js +7 -0
- data/lib/generators/active_admin/webpacker/templates/active_admin.js +5 -0
- data/lib/generators/active_admin/webpacker/templates/active_admin.scss +17 -0
- data/lib/generators/active_admin/webpacker/templates/print.scss +2 -0
- data/lib/generators/active_admin/webpacker/webpacker_generator.rb +27 -0
- data/vendor/assets/javascripts/jquery-ui/data.js +12 -8
- data/vendor/assets/javascripts/jquery-ui/disable-selection.js +10 -7
- data/vendor/assets/javascripts/jquery-ui/focusable.js +12 -9
- data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +60 -57
- data/vendor/assets/javascripts/jquery-ui/form.js +15 -12
- data/vendor/assets/javascripts/jquery-ui/ie.js +5 -2
- data/vendor/assets/javascripts/jquery-ui/keycode.js +11 -7
- data/vendor/assets/javascripts/jquery-ui/labels.js +46 -40
- data/vendor/assets/javascripts/jquery-ui/plugin.js +5 -2
- data/vendor/assets/javascripts/jquery-ui/position.js +30 -17
- data/vendor/assets/javascripts/jquery-ui/safe-active-element.js +6 -2
- data/vendor/assets/javascripts/jquery-ui/safe-blur.js +6 -2
- data/vendor/assets/javascripts/jquery-ui/scroll-parent.js +10 -7
- data/vendor/assets/javascripts/jquery-ui/tabbable.js +11 -8
- data/vendor/assets/javascripts/jquery-ui/unique-id.js +10 -7
- data/vendor/assets/javascripts/jquery-ui/version.js +6 -3
- data/vendor/assets/javascripts/jquery-ui/widget.js +53 -30
- data/vendor/assets/javascripts/jquery-ui/widgets/button.js +87 -24
- data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +276 -273
- data/vendor/assets/javascripts/jquery-ui/widgets/controlgroup.js +15 -11
- data/vendor/assets/javascripts/jquery-ui/widgets/datepicker.js +182 -62
- data/vendor/assets/javascripts/jquery-ui/widgets/dialog.js +53 -36
- data/vendor/assets/javascripts/jquery-ui/widgets/draggable.js +28 -19
- data/vendor/assets/javascripts/jquery-ui/widgets/mouse.js +22 -11
- data/vendor/assets/javascripts/jquery-ui/widgets/resizable.js +47 -26
- data/vendor/assets/javascripts/jquery-ui/widgets/sortable.js +186 -125
- data/vendor/assets/javascripts/jquery-ui/widgets/tabs.js +20 -20
- metadata +48 -114
- data/docs/.gitignore +0 -1
- data/docs/0-installation.md +0 -118
- data/docs/1-general-configuration.md +0 -224
- data/docs/10-custom-pages.md +0 -150
- data/docs/11-decorators.md +0 -59
- data/docs/12-arbre-components.md +0 -214
- data/docs/13-authorization-adapter.md +0 -285
- data/docs/14-gotchas.md +0 -138
- data/docs/2-resource-customization.md +0 -466
- data/docs/3-index-pages/custom-index.md +0 -35
- data/docs/3-index-pages/index-as-block.md +0 -19
- data/docs/3-index-pages/index-as-blog.md +0 -69
- data/docs/3-index-pages/index-as-grid.md +0 -27
- data/docs/3-index-pages/index-as-table.md +0 -234
- data/docs/3-index-pages.md +0 -328
- data/docs/4-csv-format.md +0 -74
- data/docs/5-forms.md +0 -232
- data/docs/6-show-pages.md +0 -81
- data/docs/7-sidebars.md +0 -75
- data/docs/8-custom-actions.md +0 -177
- data/docs/9-batch-actions.md +0 -237
- data/docs/CNAME +0 -1
- data/docs/Gemfile +0 -3
- data/docs/Gemfile.lock +0 -248
- data/docs/README.md +0 -24
- data/docs/_config.yml +0 -4
- data/docs/_includes/footer.html +0 -8
- data/docs/_includes/google-analytics.html +0 -16
- data/docs/_includes/head.html +0 -7
- data/docs/_includes/toc.html +0 -98
- data/docs/_includes/top-menu.html +0 -17
- data/docs/_layouts/default.html +0 -21
- data/docs/documentation.md +0 -60
- data/docs/images/activeadmin.png +0 -0
- data/docs/images/code-header.png +0 -0
- data/docs/images/divider.png +0 -0
- data/docs/images/features.png +0 -0
- data/docs/images/tidelift.svg +0 -14
- data/docs/index.html +0 -226
- data/docs/stylesheets/main.css +0 -1205
- data/lib/active_admin/deprecation.rb +0 -10
- data/lib/ransack_ext.rb +0 -20
- data/vendor/assets/javascripts/jquery-ui/escape-selector.js +0 -23
- /data/app/assets/stylesheets/active_admin/{print.scss → _print.scss} +0 -0
@@ -1,234 +0,0 @@
|
|
1
|
-
---
|
2
|
-
redirect_from: /docs/3-index-pages/index-as-table.html
|
3
|
-
---
|
4
|
-
|
5
|
-
# Index as a Table
|
6
|
-
|
7
|
-
By default, the index page is a table with each of the models content columns and links to
|
8
|
-
show, edit and delete the object. There are many ways to customize what gets
|
9
|
-
displayed.
|
10
|
-
|
11
|
-
## Defining Columns
|
12
|
-
|
13
|
-
To display an attribute or a method on a resource, simply pass a symbol into the
|
14
|
-
column method:
|
15
|
-
|
16
|
-
```ruby
|
17
|
-
index do
|
18
|
-
selectable_column
|
19
|
-
column :title
|
20
|
-
end
|
21
|
-
```
|
22
|
-
|
23
|
-
For association columns we make an educated guess on what to display by
|
24
|
-
calling the following methods in the following order:
|
25
|
-
|
26
|
-
```ruby
|
27
|
-
:display_name, :full_name, :name, :username, :login, :title, :email, :to_s
|
28
|
-
```
|
29
|
-
|
30
|
-
This can be customized in `config/initializers/active_admin.rb`.
|
31
|
-
|
32
|
-
If the default title does not work for you, pass it as the first argument:
|
33
|
-
|
34
|
-
```ruby
|
35
|
-
index do
|
36
|
-
selectable_column
|
37
|
-
column "My Custom Title", :title
|
38
|
-
end
|
39
|
-
```
|
40
|
-
|
41
|
-
Sometimes that just isn't enough and you need to write some view-specific code.
|
42
|
-
For example, say we wanted a "Title" column that links to the posts admin screen.
|
43
|
-
|
44
|
-
`column` accepts a block that will be rendered for each of the objects in the collection.
|
45
|
-
The block is called once for each resource, which is passed as an argument to the block.
|
46
|
-
|
47
|
-
```ruby
|
48
|
-
index do
|
49
|
-
selectable_column
|
50
|
-
column "Title" do |post|
|
51
|
-
link_to post.title, admin_post_path(post)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
```
|
55
|
-
|
56
|
-
## Defining Actions
|
57
|
-
|
58
|
-
To setup links to View, Edit and Delete a resource, use the `actions` method:
|
59
|
-
|
60
|
-
```ruby
|
61
|
-
index do
|
62
|
-
selectable_column
|
63
|
-
column :title
|
64
|
-
actions
|
65
|
-
end
|
66
|
-
```
|
67
|
-
|
68
|
-
You can also append custom links to the default links:
|
69
|
-
|
70
|
-
```ruby
|
71
|
-
index do
|
72
|
-
selectable_column
|
73
|
-
column :title
|
74
|
-
actions do |post|
|
75
|
-
item "Preview", admin_preview_post_path(post), class: "member_link"
|
76
|
-
end
|
77
|
-
end
|
78
|
-
```
|
79
|
-
|
80
|
-
Or forego the default links entirely:
|
81
|
-
|
82
|
-
```ruby
|
83
|
-
index do
|
84
|
-
column :title
|
85
|
-
actions defaults: false do |post|
|
86
|
-
item "View", admin_post_path(post)
|
87
|
-
end
|
88
|
-
end
|
89
|
-
```
|
90
|
-
|
91
|
-
Or append custom action with custom html via arbre:
|
92
|
-
|
93
|
-
```ruby
|
94
|
-
index do
|
95
|
-
column :title
|
96
|
-
actions do |post|
|
97
|
-
a "View", href: admin_post_path(post)
|
98
|
-
end
|
99
|
-
end
|
100
|
-
```
|
101
|
-
|
102
|
-
In case you prefer to list actions links in a dropdown menu:
|
103
|
-
|
104
|
-
```ruby
|
105
|
-
index do
|
106
|
-
selectable_column
|
107
|
-
column :title
|
108
|
-
actions dropdown: true do |post|
|
109
|
-
item "Preview", admin_preview_post_path(post)
|
110
|
-
end
|
111
|
-
end
|
112
|
-
```
|
113
|
-
|
114
|
-
In addition, you can insert the position of the row in the greater
|
115
|
-
collection by using the index_column special command:
|
116
|
-
|
117
|
-
```ruby
|
118
|
-
index do
|
119
|
-
selectable_column
|
120
|
-
index_column
|
121
|
-
column :title
|
122
|
-
end
|
123
|
-
```
|
124
|
-
|
125
|
-
index_column take an optional offset parameter to allow a developer to set
|
126
|
-
the starting number for the index (default is 1).
|
127
|
-
|
128
|
-
## Sorting
|
129
|
-
|
130
|
-
When a column is generated from an Active Record attribute, the table is
|
131
|
-
sortable by default. If you are creating a custom column, you may need to give
|
132
|
-
Active Admin a hint for how to sort the table.
|
133
|
-
|
134
|
-
You can pass the key specifying the attribute which gets used to sort objects using Active Record.
|
135
|
-
By default, this is the column on the resource's table that the attribute corresponds to.
|
136
|
-
Otherwise, any attribute that the resource collection responds to can be used.
|
137
|
-
|
138
|
-
```ruby
|
139
|
-
index do
|
140
|
-
column :title, sortable: :title do |post|
|
141
|
-
link_to post.title, admin_post_path(post)
|
142
|
-
end
|
143
|
-
end
|
144
|
-
```
|
145
|
-
|
146
|
-
You can turn off sorting on any column by passing false:
|
147
|
-
|
148
|
-
```ruby
|
149
|
-
index do
|
150
|
-
column :title, sortable: false
|
151
|
-
end
|
152
|
-
```
|
153
|
-
|
154
|
-
It's also possible to sort by PostgreSQL's hstore column key. You should set `sortable`
|
155
|
-
option to a `column->'key'` value:
|
156
|
-
|
157
|
-
```ruby
|
158
|
-
index do
|
159
|
-
column :keywords, sortable: "meta->'keywords'"
|
160
|
-
end
|
161
|
-
```
|
162
|
-
|
163
|
-
## Custom sorting
|
164
|
-
|
165
|
-
It is also possible to use database specific expressions and options for sorting by column
|
166
|
-
|
167
|
-
```ruby
|
168
|
-
order_by(:title) do |order_clause|
|
169
|
-
if order_clause.order == 'desc'
|
170
|
-
[order_clause.to_sql, 'NULLS LAST'].join(' ')
|
171
|
-
else
|
172
|
-
[order_clause.to_sql, 'NULLS FIRST'].join(' ')
|
173
|
-
end
|
174
|
-
end
|
175
|
-
|
176
|
-
index do
|
177
|
-
column :title
|
178
|
-
end
|
179
|
-
```
|
180
|
-
|
181
|
-
## Associated Sorting
|
182
|
-
|
183
|
-
You're normally able to sort columns alphabetically, but by default you
|
184
|
-
can't sort by associated objects. Though with a few simple changes, you can.
|
185
|
-
|
186
|
-
Assuming you're on the Books index page, and Book has_one Publisher:
|
187
|
-
|
188
|
-
```ruby
|
189
|
-
controller do
|
190
|
-
def scoped_collection
|
191
|
-
super.includes :publisher # prevents N+1 queries to your database
|
192
|
-
end
|
193
|
-
end
|
194
|
-
```
|
195
|
-
|
196
|
-
You can also define associated objects to include outside of the
|
197
|
-
`scoped_collection` method:
|
198
|
-
|
199
|
-
```ruby
|
200
|
-
includes :publisher
|
201
|
-
```
|
202
|
-
|
203
|
-
Then it's simple to sort by any Publisher attribute from within the index table:
|
204
|
-
|
205
|
-
```ruby
|
206
|
-
index do
|
207
|
-
column :publisher, sortable: 'publishers.name'
|
208
|
-
end
|
209
|
-
```
|
210
|
-
|
211
|
-
## Showing and Hiding Columns
|
212
|
-
|
213
|
-
The entire index block is rendered within the context of the view, so you can
|
214
|
-
easily do things that show or hide columns based on the current context.
|
215
|
-
|
216
|
-
For example, if you were using CanCan:
|
217
|
-
|
218
|
-
```ruby
|
219
|
-
index do
|
220
|
-
column :title, sortable: false
|
221
|
-
column :secret_data if can? :manage, Post
|
222
|
-
end
|
223
|
-
```
|
224
|
-
|
225
|
-
## Custom row class
|
226
|
-
|
227
|
-
In order to add special class to table rows pass the proc object as a `:row_class` option
|
228
|
-
of the `index` method.
|
229
|
-
|
230
|
-
```ruby
|
231
|
-
index row_class: ->elem { 'active' if elem.active? } do
|
232
|
-
# columns
|
233
|
-
end
|
234
|
-
```
|
data/docs/3-index-pages.md
DELETED
@@ -1,328 +0,0 @@
|
|
1
|
-
---
|
2
|
-
redirect_from: /docs/3-index-pages.html
|
3
|
-
---
|
4
|
-
|
5
|
-
# Customizing the Index Page
|
6
|
-
|
7
|
-
Filtering and listing resources is one of the most important tasks for
|
8
|
-
administering a web application. Active Admin provides many different tools for
|
9
|
-
you to build a compelling interface into your data for the admin staff.
|
10
|
-
|
11
|
-
Built in, Active Admin has the following index renderers:
|
12
|
-
|
13
|
-
* *Table*: A table drawn with each row being a resource ([View Table Docs](3-index-pages/index-as-table.md))
|
14
|
-
* *Grid*: A set of rows and columns each cell being a resource ([View Grid Docs](3-index-pages/index-as-grid.md))
|
15
|
-
* *Blocks*: A set of rows (not tabular) each row being a resource ([View Blocks Docs](3-index-pages/index-as-block.md))
|
16
|
-
* *Blog*: A title and body content, similar to a blog index ([View Blog Docs](3-index-pages/index-as-blog.md))
|
17
|
-
|
18
|
-
All index pages also support scopes, filters, pagination, action items, and
|
19
|
-
sidebar sections.
|
20
|
-
|
21
|
-
## Multiple Index Pages
|
22
|
-
|
23
|
-
Sometime you may want more than one index page for a resource to represent
|
24
|
-
different views to the user. If multiple index pages exist, Active Admin will
|
25
|
-
automatically build links at the top of the default index page. Including
|
26
|
-
multiple views is simple and requires creating multiple index components in
|
27
|
-
your resource.
|
28
|
-
|
29
|
-
```ruby
|
30
|
-
index do
|
31
|
-
id_column
|
32
|
-
column :image_title
|
33
|
-
actions
|
34
|
-
end
|
35
|
-
|
36
|
-
index as: :grid do |product|
|
37
|
-
link_to image_tag(product.image_path), admin_product_path(product)
|
38
|
-
end
|
39
|
-
```
|
40
|
-
|
41
|
-
The first index component will be the default index page unless you indicate
|
42
|
-
otherwise by setting `:default` to true.
|
43
|
-
|
44
|
-
```ruby
|
45
|
-
index do
|
46
|
-
column :image_title
|
47
|
-
actions
|
48
|
-
end
|
49
|
-
|
50
|
-
index as: :grid, default: true do |product|
|
51
|
-
link_to image_tag(product.image_path), admin_product_path(product)
|
52
|
-
end
|
53
|
-
```
|
54
|
-
|
55
|
-
## Custom Index
|
56
|
-
|
57
|
-
Active Admin does not limit the index page to be a table, block, blog or grid.
|
58
|
-
If you've created your own [custom index](3-index-pages/custom-index.md) page it
|
59
|
-
can be included by setting `:as` to the class of the index component you created.
|
60
|
-
|
61
|
-
```ruby
|
62
|
-
index as: ActiveAdmin::Views::IndexAsMyIdea do
|
63
|
-
column :image_title
|
64
|
-
actions
|
65
|
-
end
|
66
|
-
```
|
67
|
-
|
68
|
-
## Index Filters
|
69
|
-
|
70
|
-
By default the index screen includes a "Filters" sidebar on the right hand side
|
71
|
-
with a filter for each attribute of the registered model. You can customize the
|
72
|
-
filters that are displayed as well as the type of widgets they use.
|
73
|
-
|
74
|
-
To display a filter for an attribute, use the `filter` method
|
75
|
-
|
76
|
-
```ruby
|
77
|
-
ActiveAdmin.register Post do
|
78
|
-
filter :title
|
79
|
-
end
|
80
|
-
```
|
81
|
-
|
82
|
-
Out of the box, Active Admin supports the following filter types:
|
83
|
-
|
84
|
-
* *:string* - A drop down for selecting "Contains", "Equals", "Starts with",
|
85
|
-
"Ends with" and an input for a value.
|
86
|
-
* *:date_range* - A start and end date field with calendar inputs
|
87
|
-
* *:numeric* - A drop down for selecting "Equal To", "Greater Than" or "Less
|
88
|
-
Than" and an input for a value.
|
89
|
-
* *:select* - A drop down which filters based on a selected item in a collection
|
90
|
-
or all.
|
91
|
-
* *:check_boxes* - A list of check boxes users can turn on and off to filter
|
92
|
-
|
93
|
-
By default, Active Admin will pick the most relevant filter based on the
|
94
|
-
attribute type. You can force the type by passing the `:as` option.
|
95
|
-
|
96
|
-
```ruby
|
97
|
-
filter :author, as: :check_boxes
|
98
|
-
```
|
99
|
-
|
100
|
-
The `:check_boxes` and `:select` types accept options for the collection. By default
|
101
|
-
it attempts to create a collection based on an association. But you can pass in
|
102
|
-
the collection as a proc to be called at render time.
|
103
|
-
|
104
|
-
```ruby
|
105
|
-
filter :author, as: :check_boxes, collection: proc { Author.all }
|
106
|
-
```
|
107
|
-
|
108
|
-
To override options for string or numeric filter pass `filters` option.
|
109
|
-
|
110
|
-
```ruby
|
111
|
-
filter :title, filters: [:starts_with, :ends_with]
|
112
|
-
```
|
113
|
-
|
114
|
-
Also, if you don't need the select with the options 'contains', 'equals',
|
115
|
-
'starts_with' or 'ends_with' just add the option to the filter name with an
|
116
|
-
underscore.
|
117
|
-
|
118
|
-
For example:
|
119
|
-
|
120
|
-
```ruby
|
121
|
-
filter :name_equals
|
122
|
-
# or
|
123
|
-
filter :name_contains
|
124
|
-
```
|
125
|
-
|
126
|
-
You can change the filter label by passing a label option:
|
127
|
-
|
128
|
-
```ruby
|
129
|
-
filter :author, label: 'Something else'
|
130
|
-
```
|
131
|
-
|
132
|
-
By default, Active Admin will try to use ActiveModel I18n to determine the label.
|
133
|
-
|
134
|
-
You can also filter on more than one attribute of a model using the [Ransack
|
135
|
-
search predicate
|
136
|
-
syntax](https://github.com/activerecord-hackery/ransack/wiki/Basic-Searching).
|
137
|
-
If using a custom search method, you will also need to specify the field type
|
138
|
-
using `:as` and the label.
|
139
|
-
|
140
|
-
```ruby
|
141
|
-
filter :first_name_or_last_name_cont, as: :string, label: "Name"
|
142
|
-
```
|
143
|
-
|
144
|
-
Filters can also be disabled for a resource, a namespace or the entire
|
145
|
-
application.
|
146
|
-
|
147
|
-
To disable for a specific resource:
|
148
|
-
|
149
|
-
```ruby
|
150
|
-
ActiveAdmin.register Post do
|
151
|
-
config.filters = false
|
152
|
-
end
|
153
|
-
```
|
154
|
-
|
155
|
-
To disable for a namespace, in the initializer:
|
156
|
-
|
157
|
-
```ruby
|
158
|
-
ActiveAdmin.setup do |config|
|
159
|
-
config.namespace :my_namespace do |my_namespace|
|
160
|
-
my_namespace.filters = false
|
161
|
-
end
|
162
|
-
end
|
163
|
-
```
|
164
|
-
|
165
|
-
Or to disable for the entire application:
|
166
|
-
|
167
|
-
```ruby
|
168
|
-
ActiveAdmin.setup do |config|
|
169
|
-
config.filters = false
|
170
|
-
end
|
171
|
-
```
|
172
|
-
|
173
|
-
You can also add a filter and still preserve the default filters:
|
174
|
-
|
175
|
-
```ruby
|
176
|
-
preserve_default_filters!
|
177
|
-
filter :author
|
178
|
-
```
|
179
|
-
|
180
|
-
Or you can also remove a filter and still preserve the default filters:
|
181
|
-
|
182
|
-
```ruby
|
183
|
-
preserve_default_filters!
|
184
|
-
remove_filter :id
|
185
|
-
```
|
186
|
-
|
187
|
-
## Index Scopes
|
188
|
-
|
189
|
-
You can define custom scopes for your index page. This will add a tab bar above
|
190
|
-
the index table to quickly filter your collection on pre-defined scopes. There
|
191
|
-
are a number of ways to define your scopes:
|
192
|
-
|
193
|
-
```ruby
|
194
|
-
scope :all, default: true
|
195
|
-
|
196
|
-
# assumes the model has a scope called ':active'
|
197
|
-
scope :active
|
198
|
-
|
199
|
-
# renames model scope ':leaves' to ':subcategories'
|
200
|
-
scope "Subcategories", :leaves
|
201
|
-
|
202
|
-
# Dynamic scope name
|
203
|
-
scope ->{ Date.today.strftime '%A' }, :published_today
|
204
|
-
|
205
|
-
# custom scope not defined on the model
|
206
|
-
scope("Inactive") { |scope| scope.where(active: false) }
|
207
|
-
|
208
|
-
# conditionally show a custom controller scope
|
209
|
-
scope "Published", if: -> { current_admin_user.can? :manage, Posts } do |posts|
|
210
|
-
posts.published
|
211
|
-
end
|
212
|
-
```
|
213
|
-
|
214
|
-
Scopes can be labelled with a translation, e.g.
|
215
|
-
`active_admin.scopes.scope_method`.
|
216
|
-
|
217
|
-
### Scopes groups
|
218
|
-
|
219
|
-
You can assign group names to scopes to keep related scopes together and separate them from the rest.
|
220
|
-
|
221
|
-
```ruby
|
222
|
-
# a scope in the default group
|
223
|
-
scope :all
|
224
|
-
|
225
|
-
# two scopes used to filter by status
|
226
|
-
scope :active, group: :status
|
227
|
-
scope :inactive, group: :status
|
228
|
-
|
229
|
-
# two scopes used to filter by date
|
230
|
-
scope :today, group: :date
|
231
|
-
scope :tomorrow, group: :date
|
232
|
-
```
|
233
|
-
|
234
|
-
## Index default sort order
|
235
|
-
|
236
|
-
You can define the default sort order for index pages:
|
237
|
-
|
238
|
-
```ruby
|
239
|
-
ActiveAdmin.register Post do
|
240
|
-
config.sort_order = 'name_asc'
|
241
|
-
end
|
242
|
-
```
|
243
|
-
|
244
|
-
## Index pagination
|
245
|
-
|
246
|
-
You can set the number of records per page as default:
|
247
|
-
|
248
|
-
```ruby
|
249
|
-
ActiveAdmin.setup do |config|
|
250
|
-
config.default_per_page = 30
|
251
|
-
end
|
252
|
-
```
|
253
|
-
|
254
|
-
You can set the number of records per page per resources:
|
255
|
-
|
256
|
-
```ruby
|
257
|
-
ActiveAdmin.register Post do
|
258
|
-
config.per_page = 10
|
259
|
-
end
|
260
|
-
```
|
261
|
-
|
262
|
-
Or allow users to choose themselves using dropdown with values
|
263
|
-
|
264
|
-
```ruby
|
265
|
-
ActiveAdmin.register Post do
|
266
|
-
config.per_page = [10, 50, 100]
|
267
|
-
end
|
268
|
-
```
|
269
|
-
|
270
|
-
You can change it per request / action too:
|
271
|
-
|
272
|
-
```ruby
|
273
|
-
controller do
|
274
|
-
before_action only: :index do
|
275
|
-
@per_page = 100
|
276
|
-
end
|
277
|
-
end
|
278
|
-
```
|
279
|
-
|
280
|
-
You can also disable pagination:
|
281
|
-
|
282
|
-
```ruby
|
283
|
-
ActiveAdmin.register Post do
|
284
|
-
config.paginate = false
|
285
|
-
end
|
286
|
-
```
|
287
|
-
|
288
|
-
If you have a very large database, you might want to disable `SELECT COUNT(*)`
|
289
|
-
queries caused by the pagination info at the bottom of the page:
|
290
|
-
|
291
|
-
```ruby
|
292
|
-
ActiveAdmin.register Post do
|
293
|
-
index pagination_total: false do
|
294
|
-
# ...
|
295
|
-
end
|
296
|
-
end
|
297
|
-
```
|
298
|
-
|
299
|
-
## Customizing Download Links
|
300
|
-
|
301
|
-
You can easily remove or customize the download links you want displayed:
|
302
|
-
|
303
|
-
```ruby
|
304
|
-
# Per resource:
|
305
|
-
ActiveAdmin.register Post do
|
306
|
-
|
307
|
-
index download_links: false
|
308
|
-
index download_links: [:pdf]
|
309
|
-
index download_links: proc{ current_user.can_view_download_links? }
|
310
|
-
|
311
|
-
end
|
312
|
-
|
313
|
-
# For the entire application:
|
314
|
-
ActiveAdmin.setup do |config|
|
315
|
-
|
316
|
-
config.download_links = false
|
317
|
-
config.download_links = [:csv, :xml, :json, :pdf]
|
318
|
-
config.download_links = proc { current_user.can_view_download_links? }
|
319
|
-
|
320
|
-
end
|
321
|
-
```
|
322
|
-
|
323
|
-
Note: you have to actually implement PDF rendering for your action, ActiveAdmin
|
324
|
-
does not provide this feature. This setting just allows you to specify formats
|
325
|
-
that you want to show up under the index collection.
|
326
|
-
|
327
|
-
You'll need to use a PDF rendering library like PDFKit or WickedPDF to get the
|
328
|
-
PDF generation you want.
|
data/docs/4-csv-format.md
DELETED
@@ -1,74 +0,0 @@
|
|
1
|
-
---
|
2
|
-
redirect_from: /docs/4-csv-format.html
|
3
|
-
---
|
4
|
-
|
5
|
-
# Customizing the CSV format
|
6
|
-
|
7
|
-
Active Admin provides CSV file downloads on the index screen for each Resource.
|
8
|
-
By default it will render a CSV file with all the content columns of your
|
9
|
-
registered model.
|
10
|
-
|
11
|
-
Customizing the CSV format is as simple as customizing the index page.
|
12
|
-
|
13
|
-
```ruby
|
14
|
-
ActiveAdmin.register Post do
|
15
|
-
csv do
|
16
|
-
column :title
|
17
|
-
column(:author) { |post| post.author.full_name }
|
18
|
-
column('bODY', humanize_name: false) # preserve case
|
19
|
-
end
|
20
|
-
end
|
21
|
-
```
|
22
|
-
|
23
|
-
You can also set custom CSV settings for an individual resource:
|
24
|
-
|
25
|
-
```ruby
|
26
|
-
ActiveAdmin.register Post do
|
27
|
-
csv force_quotes: true, col_sep: ';', column_names: false do
|
28
|
-
column :title
|
29
|
-
column(:author) { |post| post.author.full_name }
|
30
|
-
end
|
31
|
-
end
|
32
|
-
```
|
33
|
-
|
34
|
-
Or system-wide:
|
35
|
-
|
36
|
-
```ruby
|
37
|
-
# config/initializers/active_admin.rb
|
38
|
-
|
39
|
-
# Set the CSV builder separator
|
40
|
-
config.csv_options = { col_sep: ';' }
|
41
|
-
|
42
|
-
# Force the use of quotes
|
43
|
-
config.csv_options = { force_quotes: true }
|
44
|
-
```
|
45
|
-
|
46
|
-
You can customize the filename by overriding `csv_filename` in the controller block.
|
47
|
-
|
48
|
-
```ruby
|
49
|
-
ActiveAdmin.register User do
|
50
|
-
controller do
|
51
|
-
def csv_filename
|
52
|
-
'User Details.csv'
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
```
|
57
|
-
|
58
|
-
## Streaming
|
59
|
-
|
60
|
-
By default Active Admin streams the CSV response to your browser as it's generated.
|
61
|
-
This is good because it prevents request timeouts, for example the infamous H12
|
62
|
-
error on Heroku.
|
63
|
-
|
64
|
-
However if an exception occurs while generating the CSV, the request will eventually
|
65
|
-
time out, with the last line containing the exception message. CSV streaming is
|
66
|
-
disabled in development to help debug these exceptions. That lets you use tools like
|
67
|
-
better_errors and web-console to debug the issue. If you want to customize the
|
68
|
-
environments where CSV streaming is disabled, you can change this setting:
|
69
|
-
|
70
|
-
```ruby
|
71
|
-
# config/initializers/active_admin.rb
|
72
|
-
|
73
|
-
config.disable_streaming_in = ['development', 'staging']
|
74
|
-
```
|