Module: Spree::Admin::AssetsControllerDecorator
- Defined in:
- app/controllers/spree/admin/assets_controller_decorator.rb
Instance Method Summary collapse
-
#update ⇒ Object
@gem-override spree_admin-5.3.6/app/controllers/spree/admin/assets_controller.rb#update 並び替え (stimulus-sortable) は移動した 1 件だけに asset を送るが、 その値は DB の position ではなく「画面上のインデックス + 1」である。 acts_as_list は送られた position が既存レコードと衝突したときしか周囲を 詰め直さないため、position が 1..N の連番でないと 200 を返すのに並び順が 変わらない。並び替えのときだけ、先に連番へ詰め直してから本家の更新に渡す。.
Instance Method Details
#update ⇒ Object
@gem-override spree_admin-5.3.6/app/controllers/spree/admin/assets_controller.rb#update 並び替え (stimulus-sortable) は移動した 1 件だけに asset を送るが、 その値は DB の position ではなく「画面上のインデックス + 1」である。 acts_as_list は送られた position が既存レコードと衝突したときしか周囲を 詰め直さないため、position が 1..N の連番でないと 200 を返すのに並び順が 変わらない。並び替えのときだけ、先に連番へ詰め直してから本家の更新に渡す。
詰め直しと本家の更新は 1 つのトランザクションに入れ、採番(Spree::AssetDecorator)と 同じ viewable 行ロックを取る。そうしないと、詰め直してから更新するまでの間に アップロードが 1 件 INSERT され、本家が前提にしている「1..N の連番」が崩れる。 ロックを保持したままレスポンスを描画することになるが、並び替えの応答は JSON 1 件か小さな turbo_stream なので影響は小さい。
18 19 20 21 22 23 24 25 26 |
# File 'app/controllers/spree/admin/assets_controller_decorator.rb', line 18 def update return super unless sorting_request? Spree::Asset.transaction do @asset.lock_viewable_row normalize_positions super end end |