activeadmin 2.6.1 → 3.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (326) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +438 -9
  3. data/CONTRIBUTING.md +12 -36
  4. data/README.md +8 -8
  5. data/app/assets/javascripts/active_admin/base.js +27 -25
  6. data/app/assets/stylesheets/active_admin/_base.scss +53 -37
  7. data/app/assets/stylesheets/active_admin/_forms.scss +2 -13
  8. data/app/assets/stylesheets/active_admin/_header.scss +37 -3
  9. data/app/assets/stylesheets/active_admin/_normalize.scss +25 -123
  10. data/app/assets/stylesheets/active_admin/components/_comments.scss +2 -2
  11. data/app/assets/stylesheets/active_admin/components/_date_picker.scss +1 -2
  12. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +7 -5
  13. data/app/assets/stylesheets/active_admin/components/_pagination.scss +5 -2
  14. data/app/assets/stylesheets/active_admin/components/_table_tools.scss +9 -6
  15. data/app/assets/stylesheets/active_admin/components/_tabs.scss +10 -7
  16. data/app/assets/stylesheets/active_admin/mixins/_buttons.scss +2 -2
  17. data/app/assets/stylesheets/active_admin/mixins/_variables.scss +12 -0
  18. data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +1 -1
  19. data/app/assets/stylesheets/active_admin/structure/_footer.scss +6 -1
  20. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +6 -4
  21. data/app/javascript/active_admin/initializers/has-many.js +4 -1
  22. data/app/javascript/active_admin/initializers/per-page.js +1 -1
  23. data/app/javascript/active_admin/lib/checkbox-toggler.js +3 -3
  24. data/app/javascript/active_admin/lib/dropdown-menu.js +1 -1
  25. data/app/javascript/active_admin/lib/modal-dialog.js +7 -7
  26. data/app/javascript/active_admin/lib/per-page.js +1 -1
  27. data/app/javascript/active_admin/lib/table-checkbox-toggler.js +1 -1
  28. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
  29. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +2 -2
  30. data/app/views/active_admin/devise/shared/_links.erb +1 -1
  31. data/app/views/active_admin/page/index.html.arb +1 -0
  32. data/app/views/active_admin/resource/edit.html.arb +1 -0
  33. data/app/views/active_admin/resource/index.html.arb +1 -0
  34. data/app/views/active_admin/resource/new.html.arb +1 -0
  35. data/app/views/active_admin/resource/show.html.arb +1 -0
  36. data/app/views/layouts/active_admin.html.arb +1 -0
  37. data/app/views/layouts/active_admin_logged_out.html.erb +18 -7
  38. data/config/locales/ar.yml +6 -13
  39. data/config/locales/az.yml +0 -7
  40. data/config/locales/bg.yml +0 -7
  41. data/config/locales/bs.yml +0 -7
  42. data/config/locales/ca.yml +0 -7
  43. data/config/locales/cs.yml +0 -7
  44. data/config/locales/da.yml +0 -7
  45. data/config/locales/de-CH.yml +0 -7
  46. data/config/locales/de.yml +0 -8
  47. data/config/locales/el.yml +0 -7
  48. data/config/locales/en-CA.yml +0 -7
  49. data/config/locales/en-GB.yml +0 -7
  50. data/config/locales/en.yml +0 -8
  51. data/config/locales/eo.yml +0 -8
  52. data/config/locales/es-MX.yml +2 -8
  53. data/config/locales/es.yml +2 -10
  54. data/config/locales/fa.yml +0 -7
  55. data/config/locales/fi.yml +0 -7
  56. data/config/locales/fr.yml +3 -11
  57. data/config/locales/he.yml +0 -9
  58. data/config/locales/hr.yml +0 -7
  59. data/config/locales/hu.yml +0 -8
  60. data/config/locales/id.yml +0 -7
  61. data/config/locales/it.yml +18 -8
  62. data/config/locales/ja.yml +2 -10
  63. data/config/locales/ko.yml +1 -8
  64. data/config/locales/lt.yml +0 -8
  65. data/config/locales/lv.yml +0 -7
  66. data/config/locales/mk.yml +0 -8
  67. data/config/locales/nb.yml +0 -8
  68. data/config/locales/nl.yml +1 -9
  69. data/config/locales/pl.yml +0 -8
  70. data/config/locales/pt-BR.yml +0 -8
  71. data/config/locales/pt-PT.yml +0 -7
  72. data/config/locales/ro.yml +3 -9
  73. data/config/locales/ru.yml +0 -6
  74. data/config/locales/sk.yml +0 -8
  75. data/config/locales/sv-SE.yml +58 -39
  76. data/config/locales/tr.yml +0 -11
  77. data/config/locales/uk.yml +0 -6
  78. data/config/locales/vi.yml +38 -19
  79. data/config/locales/zh-CN.yml +34 -23
  80. data/config/locales/zh-TW.yml +0 -7
  81. data/lib/active_admin/abstract_view_factory.rb +1 -0
  82. data/lib/active_admin/application.rb +19 -19
  83. data/lib/active_admin/application_settings.rb +4 -3
  84. data/lib/active_admin/asset_registration.rb +4 -3
  85. data/lib/active_admin/authorization_adapter.rb +6 -3
  86. data/lib/active_admin/base_controller/authorization.rb +15 -13
  87. data/lib/active_admin/base_controller/menu.rb +1 -0
  88. data/lib/active_admin/base_controller.rb +6 -5
  89. data/lib/active_admin/batch_actions/controller.rb +4 -3
  90. data/lib/active_admin/batch_actions/resource_extension.rb +10 -8
  91. data/lib/active_admin/batch_actions/views/batch_action_form.rb +4 -3
  92. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +7 -6
  93. data/lib/active_admin/batch_actions/views/selection_cells.rb +4 -3
  94. data/lib/active_admin/batch_actions.rb +1 -0
  95. data/lib/active_admin/callbacks.rb +1 -0
  96. data/lib/active_admin/cancan_adapter.rb +2 -1
  97. data/lib/active_admin/collection_decorator.rb +32 -0
  98. data/lib/active_admin/component.rb +1 -0
  99. data/lib/active_admin/controller_action.rb +1 -0
  100. data/lib/active_admin/csv_builder.rb +25 -17
  101. data/lib/active_admin/dependency.rb +12 -15
  102. data/lib/active_admin/devise.rb +16 -5
  103. data/lib/active_admin/dsl.rb +2 -1
  104. data/lib/active_admin/dynamic_setting.rb +1 -0
  105. data/lib/active_admin/dynamic_settings_node.rb +3 -2
  106. data/lib/active_admin/engine.rb +17 -9
  107. data/lib/active_admin/error.rb +1 -2
  108. data/lib/active_admin/filters/active.rb +2 -1
  109. data/lib/active_admin/filters/active_filter.rb +6 -6
  110. data/lib/active_admin/filters/active_sidebar.rb +4 -30
  111. data/lib/active_admin/filters/dsl.rb +1 -0
  112. data/lib/active_admin/filters/forms.rb +9 -8
  113. data/lib/active_admin/filters/formtastic_addons.rb +3 -7
  114. data/lib/active_admin/filters/resource_extension.rb +6 -5
  115. data/lib/active_admin/filters.rb +8 -7
  116. data/lib/active_admin/form_builder.rb +25 -20
  117. data/lib/active_admin/generators/boilerplate.rb +2 -1
  118. data/lib/active_admin/helpers/collection.rb +2 -0
  119. data/lib/active_admin/helpers/i18n.rb +1 -0
  120. data/lib/active_admin/helpers/optional_display.rb +3 -2
  121. data/lib/active_admin/helpers/routes/url_helpers.rb +1 -0
  122. data/lib/active_admin/helpers/scope_chain.rb +1 -0
  123. data/lib/active_admin/inputs/datepicker_input.rb +2 -1
  124. data/lib/active_admin/inputs/filters/base/search_method_select.rb +7 -6
  125. data/lib/active_admin/inputs/filters/base.rb +2 -1
  126. data/lib/active_admin/inputs/filters/boolean_input.rb +2 -1
  127. data/lib/active_admin/inputs/filters/check_boxes_input.rb +2 -1
  128. data/lib/active_admin/inputs/filters/date_picker_input.rb +1 -0
  129. data/lib/active_admin/inputs/filters/date_range_input.rb +3 -2
  130. data/lib/active_admin/inputs/filters/numeric_input.rb +2 -1
  131. data/lib/active_admin/inputs/filters/select_input.rb +5 -2
  132. data/lib/active_admin/inputs/filters/string_input.rb +2 -1
  133. data/lib/active_admin/inputs/filters/text_input.rb +1 -0
  134. data/lib/active_admin/inputs.rb +1 -0
  135. data/lib/active_admin/localizers/resource_localizer.rb +4 -3
  136. data/lib/active_admin/localizers.rb +2 -1
  137. data/lib/active_admin/menu.rb +8 -3
  138. data/lib/active_admin/menu_collection.rb +1 -0
  139. data/lib/active_admin/menu_item.rb +8 -7
  140. data/lib/active_admin/namespace.rb +16 -15
  141. data/lib/active_admin/namespace_settings.rb +9 -5
  142. data/lib/active_admin/order_clause.rb +2 -1
  143. data/lib/active_admin/orm/active_record/comments/comment.rb +12 -3
  144. data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +1 -0
  145. data/lib/active_admin/orm/active_record/comments/resource_helper.rb +1 -0
  146. data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +1 -0
  147. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +21 -20
  148. data/lib/active_admin/orm/active_record/comments/views.rb +3 -2
  149. data/lib/active_admin/orm/active_record/comments.rb +28 -27
  150. data/lib/active_admin/orm/active_record.rb +2 -1
  151. data/lib/active_admin/orm/mongoid.rb +1 -0
  152. data/lib/active_admin/page.rb +2 -1
  153. data/lib/active_admin/page_controller.rb +1 -0
  154. data/lib/active_admin/page_dsl.rb +1 -0
  155. data/lib/active_admin/page_presenter.rb +1 -0
  156. data/lib/active_admin/pundit_adapter.rb +58 -16
  157. data/lib/active_admin/resource/action_items.rb +6 -5
  158. data/lib/active_admin/resource/attributes.rb +9 -1
  159. data/lib/active_admin/resource/belongs_to.rb +3 -2
  160. data/lib/active_admin/resource/controllers.rb +2 -1
  161. data/lib/active_admin/resource/includes.rb +1 -0
  162. data/lib/active_admin/resource/menu.rb +5 -4
  163. data/lib/active_admin/resource/model.rb +1 -0
  164. data/lib/active_admin/resource/naming.rb +5 -4
  165. data/lib/active_admin/resource/ordering.rb +1 -0
  166. data/lib/active_admin/resource/page_presenters.rb +1 -0
  167. data/lib/active_admin/resource/pagination.rb +1 -0
  168. data/lib/active_admin/resource/routes.rb +6 -7
  169. data/lib/active_admin/resource/scope_to.rb +8 -7
  170. data/lib/active_admin/resource/scopes.rb +1 -0
  171. data/lib/active_admin/resource/sidebars.rb +2 -1
  172. data/lib/active_admin/resource.rb +20 -19
  173. data/lib/active_admin/resource_collection.rb +1 -0
  174. data/lib/active_admin/resource_controller/action_builder.rb +1 -0
  175. data/lib/active_admin/resource_controller/data_access.rb +31 -5
  176. data/lib/active_admin/resource_controller/decorators.rb +7 -28
  177. data/lib/active_admin/resource_controller/polymorphic_routes.rb +1 -0
  178. data/lib/active_admin/resource_controller/resource_class_methods.rb +1 -0
  179. data/lib/active_admin/resource_controller/scoping.rb +1 -0
  180. data/lib/active_admin/resource_controller/sidebars.rb +1 -0
  181. data/lib/active_admin/resource_controller/streaming.rb +9 -7
  182. data/lib/active_admin/resource_controller.rb +13 -11
  183. data/lib/active_admin/resource_dsl.rb +11 -25
  184. data/lib/active_admin/router.rb +1 -0
  185. data/lib/active_admin/scope.rb +7 -6
  186. data/lib/active_admin/settings_node.rb +1 -0
  187. data/lib/active_admin/sidebar_section.rb +1 -0
  188. data/lib/active_admin/version.rb +2 -1
  189. data/lib/active_admin/view_factory.rb +18 -17
  190. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +1 -0
  191. data/lib/active_admin/view_helpers/auto_link_helper.rb +2 -1
  192. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +4 -3
  193. data/lib/active_admin/view_helpers/display_helper.rb +23 -8
  194. data/lib/active_admin/view_helpers/download_format_links_helper.rb +2 -1
  195. data/lib/active_admin/view_helpers/fields_for.rb +3 -2
  196. data/lib/active_admin/view_helpers/flash_helper.rb +1 -0
  197. data/lib/active_admin/view_helpers/form_helper.rb +1 -0
  198. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +1 -0
  199. data/lib/active_admin/view_helpers/scope_name_helper.rb +1 -0
  200. data/lib/active_admin/view_helpers/sidebar_helper.rb +1 -0
  201. data/lib/active_admin/view_helpers/title_helper.rb +1 -0
  202. data/lib/active_admin/view_helpers/view_factory_helper.rb +1 -0
  203. data/lib/active_admin/view_helpers.rb +2 -1
  204. data/lib/active_admin/views/action_items.rb +1 -0
  205. data/lib/active_admin/views/components/active_admin_form.rb +8 -11
  206. data/lib/active_admin/views/components/active_filters_sidebar_content.rb +59 -0
  207. data/lib/active_admin/views/components/attributes_table.rb +6 -5
  208. data/lib/active_admin/views/components/blank_slate.rb +2 -1
  209. data/lib/active_admin/views/components/columns.rb +1 -0
  210. data/lib/active_admin/views/components/dropdown_menu.rb +7 -9
  211. data/lib/active_admin/views/components/index_list.rb +4 -3
  212. data/lib/active_admin/views/components/menu.rb +2 -1
  213. data/lib/active_admin/views/components/menu_item.rb +5 -4
  214. data/lib/active_admin/views/components/paginated_collection.rb +19 -18
  215. data/lib/active_admin/views/components/panel.rb +2 -1
  216. data/lib/active_admin/views/components/scopes.rb +8 -5
  217. data/lib/active_admin/views/components/sidebar.rb +1 -0
  218. data/lib/active_admin/views/components/sidebar_section.rb +1 -0
  219. data/lib/active_admin/views/components/site_title.rb +2 -1
  220. data/lib/active_admin/views/components/status_tag.rb +12 -11
  221. data/lib/active_admin/views/components/table_for.rb +18 -17
  222. data/lib/active_admin/views/components/tabs.rb +4 -3
  223. data/lib/active_admin/views/components/unsupported_browser.rb +1 -0
  224. data/lib/active_admin/views/footer.rb +3 -1
  225. data/lib/active_admin/views/header.rb +3 -2
  226. data/lib/active_admin/views/index_as_block.rb +1 -0
  227. data/lib/active_admin/views/index_as_blog.rb +2 -1
  228. data/lib/active_admin/views/index_as_grid.rb +2 -1
  229. data/lib/active_admin/views/index_as_table.rb +16 -19
  230. data/lib/active_admin/views/pages/base.rb +17 -11
  231. data/lib/active_admin/views/pages/form.rb +1 -0
  232. data/lib/active_admin/views/pages/index.rb +15 -13
  233. data/lib/active_admin/views/pages/layout.rb +1 -0
  234. data/lib/active_admin/views/pages/page.rb +1 -0
  235. data/lib/active_admin/views/pages/show.rb +2 -7
  236. data/lib/active_admin/views/tabbed_navigation.rb +3 -2
  237. data/lib/active_admin/views/title_bar.rb +2 -1
  238. data/lib/active_admin/views.rb +2 -1
  239. data/lib/active_admin.rb +63 -61
  240. data/lib/activeadmin.rb +2 -1
  241. data/lib/generators/active_admin/assets/assets_generator.rb +3 -2
  242. data/lib/generators/active_admin/assets/templates/active_admin.scss +2 -2
  243. data/lib/generators/active_admin/devise/devise_generator.rb +6 -5
  244. data/lib/generators/active_admin/install/install_generator.rb +15 -8
  245. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +27 -3
  246. data/lib/generators/active_admin/install/templates/dashboard.rb +1 -0
  247. data/lib/generators/active_admin/page/page_generator.rb +2 -1
  248. data/lib/generators/active_admin/page/templates/page.rb +1 -0
  249. data/lib/generators/active_admin/resource/resource_generator.rb +4 -3
  250. data/lib/generators/active_admin/webpacker/plugins/jquery.js +7 -0
  251. data/lib/generators/active_admin/webpacker/templates/active_admin.js +5 -0
  252. data/lib/generators/active_admin/webpacker/templates/active_admin.scss +17 -0
  253. data/lib/generators/active_admin/webpacker/templates/print.scss +2 -0
  254. data/lib/generators/active_admin/webpacker/webpacker_generator.rb +27 -0
  255. data/vendor/assets/javascripts/jquery-ui/data.js +12 -8
  256. data/vendor/assets/javascripts/jquery-ui/disable-selection.js +10 -7
  257. data/vendor/assets/javascripts/jquery-ui/focusable.js +12 -9
  258. data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +60 -57
  259. data/vendor/assets/javascripts/jquery-ui/form.js +15 -12
  260. data/vendor/assets/javascripts/jquery-ui/ie.js +5 -2
  261. data/vendor/assets/javascripts/jquery-ui/keycode.js +11 -7
  262. data/vendor/assets/javascripts/jquery-ui/labels.js +46 -40
  263. data/vendor/assets/javascripts/jquery-ui/plugin.js +5 -2
  264. data/vendor/assets/javascripts/jquery-ui/position.js +30 -17
  265. data/vendor/assets/javascripts/jquery-ui/safe-active-element.js +6 -2
  266. data/vendor/assets/javascripts/jquery-ui/safe-blur.js +6 -2
  267. data/vendor/assets/javascripts/jquery-ui/scroll-parent.js +10 -7
  268. data/vendor/assets/javascripts/jquery-ui/tabbable.js +11 -8
  269. data/vendor/assets/javascripts/jquery-ui/unique-id.js +10 -7
  270. data/vendor/assets/javascripts/jquery-ui/version.js +6 -3
  271. data/vendor/assets/javascripts/jquery-ui/widget.js +53 -30
  272. data/vendor/assets/javascripts/jquery-ui/widgets/button.js +87 -24
  273. data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +276 -273
  274. data/vendor/assets/javascripts/jquery-ui/widgets/controlgroup.js +15 -11
  275. data/vendor/assets/javascripts/jquery-ui/widgets/datepicker.js +182 -62
  276. data/vendor/assets/javascripts/jquery-ui/widgets/dialog.js +53 -36
  277. data/vendor/assets/javascripts/jquery-ui/widgets/draggable.js +28 -19
  278. data/vendor/assets/javascripts/jquery-ui/widgets/mouse.js +22 -11
  279. data/vendor/assets/javascripts/jquery-ui/widgets/resizable.js +47 -26
  280. data/vendor/assets/javascripts/jquery-ui/widgets/sortable.js +186 -125
  281. data/vendor/assets/javascripts/jquery-ui/widgets/tabs.js +20 -20
  282. metadata +48 -114
  283. data/docs/.gitignore +0 -1
  284. data/docs/0-installation.md +0 -118
  285. data/docs/1-general-configuration.md +0 -224
  286. data/docs/10-custom-pages.md +0 -150
  287. data/docs/11-decorators.md +0 -59
  288. data/docs/12-arbre-components.md +0 -214
  289. data/docs/13-authorization-adapter.md +0 -285
  290. data/docs/14-gotchas.md +0 -138
  291. data/docs/2-resource-customization.md +0 -466
  292. data/docs/3-index-pages/custom-index.md +0 -35
  293. data/docs/3-index-pages/index-as-block.md +0 -19
  294. data/docs/3-index-pages/index-as-blog.md +0 -69
  295. data/docs/3-index-pages/index-as-grid.md +0 -27
  296. data/docs/3-index-pages/index-as-table.md +0 -234
  297. data/docs/3-index-pages.md +0 -328
  298. data/docs/4-csv-format.md +0 -74
  299. data/docs/5-forms.md +0 -232
  300. data/docs/6-show-pages.md +0 -81
  301. data/docs/7-sidebars.md +0 -75
  302. data/docs/8-custom-actions.md +0 -177
  303. data/docs/9-batch-actions.md +0 -237
  304. data/docs/CNAME +0 -1
  305. data/docs/Gemfile +0 -3
  306. data/docs/Gemfile.lock +0 -248
  307. data/docs/README.md +0 -24
  308. data/docs/_config.yml +0 -4
  309. data/docs/_includes/footer.html +0 -8
  310. data/docs/_includes/google-analytics.html +0 -16
  311. data/docs/_includes/head.html +0 -7
  312. data/docs/_includes/toc.html +0 -98
  313. data/docs/_includes/top-menu.html +0 -17
  314. data/docs/_layouts/default.html +0 -21
  315. data/docs/documentation.md +0 -60
  316. data/docs/images/activeadmin.png +0 -0
  317. data/docs/images/code-header.png +0 -0
  318. data/docs/images/divider.png +0 -0
  319. data/docs/images/features.png +0 -0
  320. data/docs/images/tidelift.svg +0 -14
  321. data/docs/index.html +0 -226
  322. data/docs/stylesheets/main.css +0 -1205
  323. data/lib/active_admin/deprecation.rb +0 -10
  324. data/lib/ransack_ext.rb +0 -20
  325. data/vendor/assets/javascripts/jquery-ui/escape-selector.js +0 -23
  326. /data/app/assets/stylesheets/active_admin/{print.scss → _print.scss} +0 -0
@@ -1,466 +0,0 @@
1
- ---
2
- redirect_from: /docs/2-resource-customization.html
3
- ---
4
-
5
- # Working with Resources
6
-
7
- Every Active Admin resource corresponds to a Rails model. So before creating a
8
- resource you must first create a Rails model for it.
9
-
10
- ## Create a Resource
11
-
12
- The basic command for creating a resource is `rails g active_admin:resource Post`.
13
- The generator will produce an empty `app/admin/posts.rb` file like so:
14
-
15
- ```ruby
16
- ActiveAdmin.register Post do
17
- # everything happens here :D
18
- end
19
- ```
20
-
21
- ## Setting up Strong Parameters
22
-
23
- Use the `permit_params` method to define which attributes may be changed:
24
-
25
- ```ruby
26
- ActiveAdmin.register Post do
27
- permit_params :title, :content, :publisher_id
28
- end
29
- ```
30
-
31
- Any form field that sends multiple values (such as a HABTM association, or an
32
- array attribute) needs to pass an empty array to `permit_params`:
33
-
34
- If your HABTM is `roles`, you should permit `role_ids: []`
35
-
36
- ```ruby
37
- ActiveAdmin.register Post do
38
- permit_params :title, :content, :publisher_id, role_ids: []
39
- end
40
- ```
41
-
42
- Nested associations in the same form also require an array, but it
43
- needs to be filled with any attributes used.
44
-
45
- ```ruby
46
- ActiveAdmin.register Post do
47
- permit_params :title, :content, :publisher_id,
48
- tags_attributes: [:id, :name, :description, :_destroy]
49
- end
50
-
51
- # Note that `accepts_nested_attributes_for` is still required:
52
- class Post < ActiveRecord::Base
53
- accepts_nested_attributes_for :tags, allow_destroy: true
54
- end
55
- ```
56
-
57
- If you want to dynamically choose which attributes can be set, pass a block:
58
-
59
- ```ruby
60
- ActiveAdmin.register Post do
61
- permit_params do
62
- params = [:title, :content, :publisher_id]
63
- params.push :author_id if current_user.admin?
64
- params
65
- end
66
- end
67
- ```
68
-
69
- If your resource is nested, declare `permit_params` after `belongs_to`:
70
-
71
- ```ruby
72
- ActiveAdmin.register Post do
73
- belongs_to :user
74
- permit_params :title, :content, :publisher_id
75
- end
76
- ```
77
-
78
- The `permit_params` call creates a method called `permitted_params`. You should
79
- use this method when overriding `create` or `update` actions:
80
-
81
- ```ruby
82
- ActiveAdmin.register Post do
83
- controller do
84
- def create
85
- # Good
86
- @post = Post.new(permitted_params[:post])
87
- # Bad
88
- @post = Post.new(params[:post])
89
-
90
- if @post.save
91
- # ...
92
- end
93
- end
94
- end
95
- end
96
- ```
97
-
98
- ## Disabling Actions on a Resource
99
-
100
- All CRUD actions are enabled by default. These can be disabled for a given resource:
101
-
102
- ```ruby
103
- ActiveAdmin.register Post do
104
- actions :all, except: [:update, :destroy]
105
- end
106
- ```
107
-
108
- ## Renaming Action Items
109
-
110
- You can use translations to override labels and page titles for actions such as
111
- new, edit, and destroy by providing a resource specific translation. For
112
- example, to change 'New Offer' to 'Make an Offer' add the following in
113
- config/locales/[en].yml:
114
-
115
- ```yaml
116
- en:
117
- active_admin:
118
- resources:
119
- offer: # Registered resource
120
- new_model: 'Make an Offer' # new action item
121
- edit_model: 'Change Offer' # edit action item
122
- delete_model: 'Cancel Offer' # delete action item
123
- ```
124
-
125
- See the [default en.yml](/config/locales/en.yml) locale file for
126
- existing translations and examples.
127
-
128
- ## Rename the Resource
129
-
130
- By default, any references to the resource (menu, routes, buttons, etc) in the
131
- interface will use the name of the class. You can rename the resource by using
132
- the `:as` option.
133
-
134
- ```ruby
135
- ActiveAdmin.register Post, as: "Article"
136
- ```
137
-
138
- The resource will then be available at `/admin/articles`.
139
-
140
- ## Customize the Namespace
141
-
142
- We use the `admin` namespace by default, but you can use anything:
143
-
144
- ```ruby
145
- # Available at /today/posts
146
- ActiveAdmin.register Post, namespace: :today
147
-
148
- # Available at /posts
149
- ActiveAdmin.register Post, namespace: false
150
- ```
151
-
152
- ## Customize the Menu
153
-
154
- The resource will be displayed in the global navigation by default. To disable
155
- the resource from being displayed in the global navigation:
156
-
157
- ```ruby
158
- ActiveAdmin.register Post do
159
- menu false
160
- end
161
- ```
162
-
163
- The menu method accepts a hash with the following options:
164
-
165
- * `:label` - The string or proc label to display in the menu. If it's a proc, it
166
- will be called each time the menu is rendered.
167
- * `:parent` - The string id (or label) of the parent used for this menu
168
- * `:if` - A block or a symbol of a method to call to decide if the menu item
169
- should be displayed
170
- * `:priority` - The integer value of the priority, which defaults to `10`
171
-
172
- ### Labels
173
-
174
- To change the name of the label in the menu:
175
-
176
- ```ruby
177
- ActiveAdmin.register Post do
178
- menu label: "My Posts"
179
- end
180
- ```
181
-
182
- If you want something more dynamic, pass a proc instead:
183
-
184
- ```ruby
185
- ActiveAdmin.register Post do
186
- menu label: proc{ I18n.t "mypost" }
187
- end
188
- ```
189
-
190
- ### Menu Priority
191
-
192
- Menu items are sorted first by their numeric priority, then alphabetically. Since
193
- every menu by default has a priority of `10`, the menu is normally alphabetical.
194
-
195
- You can easily customize this:
196
-
197
- ```ruby
198
- ActiveAdmin.register Post do
199
- menu priority: 1 # so it's on the very left
200
- end
201
- ```
202
-
203
- ### Conditionally Showing / Hiding Menu Items
204
-
205
- Menu items can be shown or hidden at runtime using the `:if` option.
206
-
207
- ```ruby
208
- ActiveAdmin.register Post do
209
- menu if: proc{ current_user.can_edit_posts? }
210
- end
211
- ```
212
-
213
- The proc will be called in the context of the view, so you have access to all
214
- your helpers and current user session information.
215
-
216
- ### Drop Down Menus
217
-
218
- In many cases, a single level navigation will not be enough to manage a large
219
- application. In that case, you can group your menu items under a parent menu item.
220
-
221
- ```ruby
222
- ActiveAdmin.register Post do
223
- menu parent: "Blog"
224
- end
225
- ```
226
-
227
- Note that the "Blog" parent menu item doesn't even have to exist yet; it can be
228
- dynamically generated for you.
229
-
230
- ### Customizing Parent Menu Items
231
-
232
- All of the options given to a standard menu item are also available to
233
- parent menu items. In the case of complex parent menu items, you should
234
- configure them in the Active Admin initializer.
235
-
236
- ```ruby
237
- # config/initializers/active_admin.rb
238
- config.namespace :admin do |admin|
239
- admin.build_menu do |menu|
240
- menu.add label: 'Blog', priority: 0
241
- end
242
- end
243
-
244
- # app/admin/post.rb
245
- ActiveAdmin.register Post do
246
- menu parent: 'Blog'
247
- end
248
- ```
249
-
250
- ### Dynamic Parent Menu Items
251
-
252
- While the above works fine, what if you want a parent menu item with a dynamic
253
- name? Well, you have to refer to it by its `:id`.
254
-
255
- ```ruby
256
- # config/initializers/active_admin.rb
257
- config.namespace :admin do |admin|
258
- admin.build_menu do |menu|
259
- menu.add id: 'blog', label: proc{"Something dynamic"}, priority: 0
260
- end
261
- end
262
-
263
- # app/admin/post.rb
264
- ActiveAdmin.register Post do
265
- menu parent: 'blog'
266
- end
267
- ```
268
-
269
- ### Adding Custom Menu Items
270
-
271
- Sometimes it's not enough to just customize the menu label. In this case, you
272
- can customize the menu for the namespace within the Active Admin initializer.
273
-
274
- ```ruby
275
- # config/initializers/active_admin.rb
276
- config.namespace :admin do |admin|
277
- admin.build_menu do |menu|
278
- menu.add label: "The Application", url: "/", priority: 0
279
-
280
- menu.add label: "Sites" do |sites|
281
- sites.add label: "Google",
282
- url: "http://google.com",
283
- html_options: { target: :blank }
284
-
285
- sites.add label: "Facebook",
286
- url: "http://facebook.com"
287
-
288
- sites.add label: "Github",
289
- url: "http://github.com"
290
- end
291
- end
292
- end
293
- ```
294
-
295
- This will be registered on application start before your resources are loaded.
296
-
297
- ## Scoping the queries
298
-
299
- If your administrators have different access levels, you may sometimes want to
300
- scope what they have access to. Assuming your User model has the proper
301
- has_many relationships, you can simply scope the listings and finders like so:
302
-
303
- ```ruby
304
- ActiveAdmin.register Post do
305
- scope_to :current_user # limits the accessible posts to `current_user.posts`
306
-
307
- # Or if the association doesn't have the default name:
308
- scope_to :current_user, association_method: :blog_posts
309
-
310
- # Finally, you can pass a block to be called:
311
- scope_to do
312
- User.most_popular_posts
313
- end
314
- end
315
- ```
316
-
317
- You can also conditionally apply the scope:
318
-
319
- ```ruby
320
- ActiveAdmin.register Post do
321
- scope_to :current_user, if: proc{ current_user.limited_access? }
322
- scope_to :current_user, unless: proc{ current_user.admin? }
323
- end
324
- ```
325
-
326
- ## Eager loading
327
-
328
- A common way to increase page performance is to eliminate N+1 queries by eager
329
- loading associations:
330
-
331
- ```ruby
332
- ActiveAdmin.register Post do
333
- includes :author, :categories
334
- end
335
- ```
336
-
337
- ## Customizing resource retrieval
338
-
339
- Our controllers are built on [Inherited
340
- Resources](https://github.com/activeadmin/inherited_resources), so you can use
341
- [all of its
342
- features](https://github.com/activeadmin/inherited_resources#overwriting-defaults).
343
-
344
- If you need to customize the collection properties, you can overwrite the
345
- `scoped_collection` method.
346
-
347
- ```ruby
348
- ActiveAdmin.register Post do
349
- controller do
350
- def scoped_collection
351
- end_of_association_chain.where(visibility: true)
352
- end
353
- end
354
- end
355
- ```
356
-
357
- If you need to completely replace the record retrieving code (e.g., you have a
358
- custom `to_param` implementation in your models), override the `find_resource` method
359
- on the controller:
360
-
361
- ```ruby
362
- ActiveAdmin.register Post do
363
- controller do
364
- def find_resource
365
- scoped_collection.where(id: params[:id]).first!
366
- end
367
- end
368
- end
369
- ```
370
-
371
- Note that if you use an authorization library like CanCan, you should be careful
372
- to not write code like this, otherwise **your authorization rules won't be
373
- applied**:
374
-
375
- ```ruby
376
- ActiveAdmin.register Post do
377
- controller do
378
- def find_resource
379
- Post.where(id: params[:id]).first!
380
- end
381
- end
382
- end
383
- ```
384
-
385
- ## Belongs To
386
-
387
- It's common to want to scope a series of resources to a relationship. For
388
- example a Project may have many Milestones and Tickets. To nest the resource
389
- within another, you can use the `belongs_to` method:
390
-
391
- ```ruby
392
- ActiveAdmin.register Project
393
- ActiveAdmin.register Ticket do
394
- belongs_to :project
395
- end
396
- ```
397
-
398
- Projects will be available as usual and tickets will be available by visiting
399
- `/admin/projects/1/tickets` assuming that a Project with the id of 1 exists.
400
- Active Admin does not add "Tickets" to the global navigation because the routes
401
- can only be generated when there is a project id.
402
-
403
- To create links to the resource, you can add them to a sidebar (one of the many
404
- possibilities for how you may with to handle your user interface):
405
-
406
- ```ruby
407
- ActiveAdmin.register Project do
408
-
409
- sidebar "Project Details", only: [:show, :edit] do
410
- ul do
411
- li link_to "Tickets", admin_project_tickets_path(resource)
412
- li link_to "Milestones", admin_project_milestones_path(resource)
413
- end
414
- end
415
- end
416
-
417
- ActiveAdmin.register Ticket do
418
- belongs_to :project
419
- end
420
-
421
- ActiveAdmin.register Milestone do
422
- belongs_to :project
423
- end
424
- ```
425
-
426
- In some cases (like Projects), there are many sub resources and you would
427
- actually like the global navigation to switch when the user navigates "into" a
428
- project. To accomplish this, Active Admin stores the `belongs_to` resources in a
429
- separate menu which you can use if you so wish. To use:
430
-
431
- ```ruby
432
- ActiveAdmin.register Ticket do
433
- belongs_to :project
434
- navigation_menu :project
435
- end
436
-
437
- ActiveAdmin.register Milestone do
438
- belongs_to :project
439
- navigation_menu :project
440
- end
441
- ```
442
-
443
- Now, when you navigate to the tickets section, the global navigation will
444
- only display "Tickets" and "Milestones". When you navigate back to a
445
- non-belongs_to resource, it will switch back to the default menu.
446
-
447
- You can also defer the menu lookup until runtime so that you can dynamically show
448
- different menus, say perhaps based on user permissions. For example:
449
-
450
- ```ruby
451
- ActiveAdmin.register Ticket do
452
- belongs_to :project
453
- navigation_menu do
454
- authorized?(:manage, SomeResource) ? :project : :restricted_menu
455
- end
456
- end
457
- ```
458
-
459
- If you still want your `belongs_to` resources to be available in the default menu
460
- and through non-nested routes, you can use the `:optional` option. For example:
461
-
462
- ```ruby
463
- ActiveAdmin.register Ticket do
464
- belongs_to :project, optional: true
465
- end
466
- ```
@@ -1,35 +0,0 @@
1
- ---
2
- redirect_from: /docs/3-index-pages/custom-index.html
3
- ---
4
-
5
- # Custom Index
6
-
7
- If the supplied Active Admin index components are insufficient for your project
8
- feel free to define your own. Index classes inherit from `ActiveAdmin::Component`
9
- and require a `build` method and an `index_name` class method.
10
-
11
- ```ruby
12
- module ActiveAdmin
13
- module Views
14
- class IndexAsMyIdea < ActiveAdmin::Component
15
-
16
- def build(page_presenter, collection)
17
- # ...
18
- end
19
-
20
- def self.index_name
21
- "my_idea"
22
- end
23
-
24
- end
25
- end
26
- end
27
- ```
28
-
29
- The build method takes a PagePresenter object and collection of whatever you
30
- choose.
31
-
32
- The `index_name` class method takes no arguments and returns a string that should
33
- be representative of the class name. If this method is not defined, your
34
- index component will not be able take advantage of Active Admin's
35
- *multiple index pages* feature.
@@ -1,19 +0,0 @@
1
- ---
2
- redirect_from: /docs/3-index-pages/index-as-block.html
3
- ---
4
-
5
- # Index as a Block
6
-
7
- If you want to fully customize the display of your resources on the index
8
- screen, Index as a Block allows you to render a block of content for each
9
- resource.
10
-
11
- ```ruby
12
- index as: :block do |product|
13
- div for: product do
14
- resource_selection_cell product
15
- h2 auto_link product.title
16
- div simple_format product.description
17
- end
18
- end
19
- ```
@@ -1,69 +0,0 @@
1
- ---
2
- redirect_from: /docs/3-index-pages/index-as-blog.html
3
- ---
4
-
5
- # Index as Blog
6
-
7
- Render your index page as a set of posts. The post has two main options:
8
- title and body.
9
-
10
- ```ruby
11
- index as: :blog do
12
- title :my_title # Calls #my_title on each resource
13
- body :my_body # Calls #my_body on each resource
14
- end
15
- ```
16
-
17
- ## Post Title
18
-
19
- The title is the content that will be rendered within a link to the
20
- resource. There are two main ways to set the content for the title
21
-
22
- First, you can pass in a method to be called on your resource. For example:
23
-
24
- ```ruby
25
- index as: :blog do
26
- title :a_method_to_call
27
- end
28
- ```
29
-
30
- Second, you can pass a block to the tile option which will then be
31
- used as the contents of the title. The resource being rendered
32
- is passed in to the block. For Example:
33
-
34
- ```ruby
35
- index as: :blog do
36
- title do |post|
37
- span post.title, class: 'title'
38
- span post.created_at, class: 'created_at'
39
- end
40
- end
41
- ```
42
-
43
- ## Post Body
44
-
45
- The body is rendered underneath the title of each post. The same two
46
- style of options work as the Post Title above.
47
-
48
- Call a method on the resource as the body:
49
-
50
- ```ruby
51
- index as: :blog do
52
- title :my_title
53
- body :my_body
54
- end
55
- ```
56
-
57
- Or, render a block as the body:
58
-
59
- ```ruby
60
- index as: :blog do
61
- title :my_title
62
- body do |post|
63
- div truncate post.title
64
- div class: 'meta' do
65
- span "Post in #{post.categories.join(', ')}"
66
- end
67
- end
68
- end
69
- ```
@@ -1,27 +0,0 @@
1
- ---
2
- redirect_from: /docs/3-index-pages/index-as-grid.html
3
- ---
4
-
5
- # Index as a Grid
6
-
7
- Sometimes you want to display the index screen for a set of resources as a grid
8
- (possibly a grid of thumbnail images). To do so, use the :grid option for the
9
- index block.
10
-
11
- ```ruby
12
- index as: :grid do |product|
13
- link_to image_tag(product.image_path), admin_product_path(product)
14
- end
15
- ```
16
-
17
- The block is rendered within a cell in the grid once for each resource in the
18
- collection. The resource is passed into the block for you to use in the view.
19
-
20
- You can customize the number of columns that are rendered using the columns
21
- option:
22
-
23
- ```ruby
24
- index as: :grid, columns: 5 do |product|
25
- link_to image_tag(product.image_path), admin_product_path(product)
26
- end
27
- ```