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 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 | ✗ | — | — | — | — | ||