diff options
| author | erdgeist <erdgeist@erdgeist.org> | 2026-07-13 03:22:37 +0200 |
|---|---|---|
| committer | erdgeist <erdgeist@erdgeist.org> | 2026-07-13 03:22:37 +0200 |
| commit | 70653b681d10917b77dced08f577446ced7568f1 (patch) | |
| tree | 3c92383e29da79beb3e1419c153952a4aa7dc1ab /app/models | |
| parent | 65c7c40f74c315c1a39fb15da8ce341fb8b9b05e (diff) | |
Add RelatedAssetsController: search, attach, detach, reorder
Backend for the asset-picker rebuild -- replaces the plan to dump
every image asset in the system into a hidden, unfiltered browse
panel on every node edit (the actual current behavior, confirmed by
reading nodes/edit.html.erb directly) with a small, name-scoped search
endpoint plus create/destroy/update for attach, detach, and reorder.
No schema change needed -- RelatedAsset already had everything this
requires (asset_id, page_id, an acts_as_list position). search excludes
assets already attached to the page, keeping results meaningfully small
given hundreds of assets total but only a handful per node in practice.
create is find_or_create_by! rather than a bare create!, guarding
against the same asset being attached twice from two separate search
results. update leans on acts_as_list's own insert_at rather than
custom position-shifting logic.
Node#editable_page (autosave || draft || head) is extracted since this
is now its third call site with identical logic -- deliberately not
touching nodes#show, which resolves draft || head without autosave on
purpose, a different and correct semantic for "current committed
state" versus "what's actively being edited."
Diffstat (limited to 'app/models')
| -rw-r--r-- | app/models/node.rb | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/app/models/node.rb b/app/models/node.rb index 1d0a089..0361c1e 100644 --- a/app/models/node.rb +++ b/app/models/node.rb | |||
| @@ -328,6 +328,10 @@ class Node < ApplicationRecord | |||
| 328 | unique_path.length == 3 && unique_path[0] == "updates" | 328 | unique_path.length == 3 && unique_path[0] == "updates" |
| 329 | end | 329 | end |
| 330 | 330 | ||
| 331 | def editable_page | ||
| 332 | autosave || draft || head | ||
| 333 | end | ||
| 334 | |||
| 331 | # Returns immutable node id for all new nodes so that the atom feed entry ids | 335 | # Returns immutable node id for all new nodes so that the atom feed entry ids |
| 332 | # stay the same eventhough the slug or positions changes. | 336 | # stay the same eventhough the slug or positions changes. |
| 333 | # Can be removed after a year or so ;) | 337 | # Can be removed after a year or so ;) |
