Column picker

How this page is built the gem renders it — this is all you write

Pass picker: true and a gear appears in the header row: the user ticks which columns are shown and (with the optional crud-columns Stimulus controller) drags to reorder them. It submits ?cols[]= to this same URL — like the sort links and filter row — so it opens and works without JavaScript. The picker groups every column by its source model (Pipedrive-style): own columns under this model, association and path columns under the model they reach — publisher.founded_on under Publisher, authors.email under Author. The selection is always intersected with the permitted set, so a forged ?cols= can only hide or reorder, never reveal one.

app/models/book.rb
fieldset :picker, %i[title genre price publisher publisher.name
                     publisher.founded_on authors.name authors.email active]   # path columns: assoc.attr
app/views/columns/index.html.erb
<%= crud_collection @books, fieldset: :picker,
                     extra_columns: @columns,   <%# declared + path + dynamic — all pickable %>
                     picker: true %>            <%# gear + read ?cols= (picked_columns: :auto) %>

Read more: Column picker  ·  Path columns

Reset
Title Genre Price Publisher Publisher › Name Publisher › Founded on Authors › Name Authors › Email Active Shelf Weight Signed Acquired
Reset
The Ancient Tower 11 Fiction 40.82 € Gollancz Gollancz 1927-01-01 Ted Chiang, Ann Leckie, Frank Herbert ted@example.com, ann@example.com, frank@example.com
The Dispossessed Ocean 67 Fiction 40.62 € Tor Books Tor Books 1980-01-01 Martha Wells martha@example.com
The Hidden Signal 85 Fiction 20.30 € Ace Ace 1952-01-01 Becky Chambers, Liu Cixin, Margaret Atwood becky@example.com, liu@example.com, margaret@example.com
The Broken Mirror 96 Fiction 34.38 € Vintage Vintage 1954-01-01 Stanisław Lem stanislaw@example.com