No release in over 3 years
Low commit activity in last 3 years
An Active Admin plugin which improves one-to-many and many-to-many associations selection (jQuery required)
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

~> 2.4
 Project Readme

ActiveAdmin Select Many

gem version gem downloads specs

An Active Admin plugin which improves one-to-many / many-to-many / many-to-one associations selection using 2 new inputs: select_many and select_one (jQuery required).

Features for select_many:

  • search box;
  • available items on the left, selected items on the right;
  • local/remote collections;
  • double click to add/remove items;
  • sortable (with up/down buttons);
  • key bindings to improve accessibility.

Features for select_one:

  • search box;
  • selected items on the right;
  • remote collections;
  • counter of items found;
  • can be used as filter;
  • key bindings to improve accessibility.

screenshot

(inspired by RailsAdmin associations selector)

Install

  • Add to your Gemfile: gem 'activeadmin_select_many'
  • Execute bundle
  • Add at the end of your ActiveAdmin styles (app/assets/stylesheets/active_admin.scss): @import 'activeadmin/select_many';
  • Add at the end of your ActiveAdmin javascripts (app/assets/javascripts/active_admin.js): //= require activeadmin/select_many
  • Use the input with as: :select_many in Active Admin model conf

Options

  • collection: local collection
  • counter_limit: if results count is greater than or equal to this limit a '+' is shown
  • filter_form: for select_one only, allow to use it as filter
  • include_blank: for select_one only, default true, allow to include a blank value on top
  • member_label: key to use as text for select options
  • placeholder: placeholder string for search box
  • remote_collection: JSON path
  • search_param: parameter to use as search key (ransack format)
  • selected: force value selection (array for select_many, single value for select_one)
  • size: number of rows of both the selects (default: 4)
  • sortable: set to true to enable sortable buttons (default: not set)

Examples with select_many

Add to ActiveAdmin model config, in form block.

  • Local collection (no AJAX calls): f.input :sections, as: :select_many
  • Remote collection (using AJAX): f.input :tags, as: :select_many, remote_collection: admin_tags_path( format: :json )
  • Changing search param and text key (default: name): f.input :tags, as: :select_many, remote_collection: admin_tags_path( format: :json ), search_param: 'category_contains', member_label: 'category', placeholder: 'Type something...'
  • Sortable (items position must be saved manually): f.input :tags, as: :select_many, remote_collection: admin_tags_path( format: :json ), sortable: true

Example to update position field:

  after_save :on_after_save
  controller do
    def on_after_save( object )
      if params[:article][:section_ids]
        order = {}
        params[:article][:section_ids].each_with_index { |id, i| order[id.to_i] = i }
        object.sections.each { |item| item.update_column( :position, order[item.id].to_i ) }
      end
    end
  end

Example to enable JSON response on an ActiveAdmin model:

ActiveAdmin.register Tag do
  config.per_page = 30  # to limit served items
  config.sort_order = 'name_asc'
  index download_links: [:json]
end

Examples with select_one

In a form:

f.input :article, as: :select_one, placeholder: 'Search...', remote_collection: admin_articles_path( format: :json ), search_param: 'title_contains', member_label: 'title'

As filter:

filter :article_id_eq, as: :select_one, filter_form: true, placeholder: 'Search...', search_param: 'title_contains', member_label: 'title', remote_collection: '/admin/articles.json'

Notes

  • To use this plugins with ActiveAdmin 1.x please use the version 0.3.4

Do you like it? Star it!

If you use this component just star it. A developer is more motivated to improve a project when there is some interest. My other Active Admin components.

Or consider offering me a coffee, it's a small thing but it is greatly appreciated: about me.

Contributors

License

MIT