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 Signal 16 | Scifi | 35.51 € | Del Rey | Del Rey | 1977-01-01 | Joe Abercrombie | joe@example.com | ✗ | — | — | — | — | ||
| The Quiet Door 18 | Scifi | 21.79 € | Gollancz | Gollancz | 1927-01-01 | Becky Chambers | becky@example.com | ✗ | — | — | — | — | ||
| The Hidden Engine 23 | Scifi | 40.55 € | DAW | DAW | 1971-01-01 | Stanisław Lem, Adrian Tchaikovsky, Becky Chambers | stanislaw@example.com, adrian@example.com, becky@example.com | ✗ | — | — | — | — | ||
| The Hidden Engine 78 | Scifi | 8.00 € | — | — | — | Iain Banks | iain@example.com | ✗ | — | — | — | — | ||