The project is in a healthy, maintained state
Group your checkboxes like grouped select via “grouped_collection_select” in Rails. This gem adds a new Formtastic input type “grouped_check_boxes”, that helps you group long lists of checkboxes.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Development

>= 0.9.20
~> 3

Runtime

 Project Readme

Formtastic grouped checkboxes

Gem Version

Group your Formtastic checkboxes like grouped select via “grouped_collection_select” in Rails.

Installation

Add this line to your application's Gemfile:

gem "formtastic_grouped_check_boxes"

Import our Sass file “formtastic-grouped-check-boxes.css” in your CSS entrypoint that compiles CSS files:

// app/assets/stylesheets/application.sass

// Your regular ActiveAdmin files
@import ...
@import ...

// This gem’s files
@import "formtastic-grouped-check-boxes"

Use

This gem adds a new input type :grouped_check_boxes.

It also adds 3 new input options, 2 of which follow the Rails naming convention from grouped_collection_select (docs):

  • group_method — The name of a method which, when called on a member of collection, returns an array of child objects. It can also be a Proc / lambda, that will be called for each member of the collection to retrieve the value.
  • group_label_method — The name of a method which, when called on a member of collection, returns a string to be used as the group name. No Proc support here yet.
  • group_label_parent — Whether to prepend the fieldset label with the parent input title (on: “Technologies / Marketing”, off: “Marketing”).

Example

Providing that our models look like so:

class Project < ApplicationRecord
  has_many :technologies # details omitted
  accepts_nested_attributes_for :technologies
end
class Technology < ApplicationRecord
  has_many :projects # details omitted
  belongs_to :area, foreign_key: :area_id, class_name: "TechnologyArea", optional: true
end

# Table name: technologies
#  id       :bigint  not null, primary key
#  name     :string  not null
#  area_id  :bigint
class TechnologyArea < ApplicationRecord
  has_many :technologies
end

# Table name: technology_areas
#  id    :bigint  not null, primary key
#  name  :string  not null

In ActiveAdmin you can do the following

ActiveAdmin.register Project do
  permit_params technology_ids: [], ...

  form do |f|
    f.inputs "Technologies" do
      f.input :technologies,
              as: :grouped_check_boxes, \
              collection: Technology.order(:name) \
                          .select(:id, :name, :area_id) \ # note the `:area_id`
                          .includes(:area), \ # prevent N+1
              group_method: :area, \ # calls `.area` on each instance of `Technology` (that’s why we need `:area_id`)
              group_label_method: :name, \ # calls `.name` on each instance of `TechnologyArea`
              group_label_parent: true # not required
    end
  end
end

Results in:

screenshot-1

While producing such code:

<fieldset class="inputs">
  <legend><span>Technologies</span></legend>
  <ol>
    <li class="grouped_check_boxes check_boxes input optional" id="project_technologies_input">
      <input type="hidden" name="project[technology_ids][]" id="project_technologies_none" value="" autocomplete="off">

      <fieldset class="choices grouped_check_boxes__choices">
        <legend class="label grouped_check_boxes__legend">
          <label class="grouped_check_boxes__legend__label">Technologies / No subgroup</label>
        </legend>

        <ol class="choices-group grouped_check_boxes__choices-group">
          <li class="choice grouped_check_boxes__choice">
            <label for="project_technology_ids_46">
              <input type="checkbox" name="project[technology_ids][]" id="project_technology_ids_46" value="46">BitBucket
            </label>
          </li>
          <li class="choice grouped_check_boxes__choice">
            <label for="project_technology_ids_138">
              <input type="checkbox" name="project[technology_ids][]" id="project_technology_ids_138" value="138">BrainTree API (Ruby SDK)
            </label>
          </li>
        </ol>
      </fieldset>

      <fieldset class="choices grouped_check_boxes__choices">
        <legend class="label grouped_check_boxes__legend">
          <label class="grouped_check_boxes__legend__label">Technologies / Marketing</label>
        </legend>

        <ol class="choices-group grouped_check_boxes__choices-group">
          <li class="choice grouped_check_boxes__choice">
            <label for="project_technology_ids_59">
              <input type="checkbox" name="project[technology_ids][]" id="project_technology_ids_59" value="59">Direct sales
            </label>
          </li>
          <li class="choice grouped_check_boxes__choice">
            <label for="project_technology_ids_89">
              <input type="checkbox" name="project[technology_ids][]" id="project_technology_ids_89" value="89">Google Analytics
            </label>
          </li>
        </ol>
      </fieldset>
    </li>
  </ol>
</fieldset>