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
| Title | Genre | Price | Publisher | Publisher › Name | Publisher › Founded on | Authors › Name | Authors › Email | Active | Shelf | Weight | Signed | Acquired |
|
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
|
|
|
|||||||||||
| The Dispossessed Winter 73 | Scifi | 29.24 € | Ace | Ace | 1952-01-01 | Adrian Tchaikovsky, Iain Banks | adrian@example.com, iain@example.com | ✗ | — | — | — | — | ||
| The Hidden Archive 98 | Scifi | 27.03 € | DAW | DAW | 1971-01-01 | Martha Wells, Ursula Le Guin | martha@example.com, ursula@example.com | ✗ | — | — | — | — | ||
| The Endless Machine 117 | Scifi | 14.47 € | Gollancz | Gollancz | 1927-01-01 | Ted Chiang, Kim Robinson | ted@example.com, kim@example.com | ✗ | — | — | — | — | ||