【发布时间】:2023-03-29 07:18:01
【问题描述】:
我有一个 List 记录,每个 List 都有很多 Stage,将由用户创建/删除/移动。目前,我在阶段表上有一个“位置”列,用于跟踪阶段在列表中的位置,我只是按升序查询它们。但是,在删除阶段或需要将阶段插入列表中间的情况下,这会很复杂。这样做需要在插入/删除阶段的位置之后更新每个阶段的位置,这对我来说不是很干净。
这是我所拥有的一个准系统示例:
class List < ActiveRecord::Base
has_many :stages
end
class Stage < ActiveRecord::Base
default_scope { order(position: :asc) }
end
然后,如果我想做一些事情,比如在列表中间插入一个阶段,我需要这样做:
def insert(stage, position)
stage.position = position
stages.where('position >= ?', position).each { |stage| stage.update(position: stage.position + 1) }
stages << stage
end
有什么方法可以轻松设置这些阶段的顺序,以便移动它们的顺序或删除不需要这么多手动更新的阶段?有点像 counter_cache 自动更新计数的方式
感谢您的帮助
【问题讨论】:
-
我一直都是这样做的。也许有一个acts_as_something 可以实现这一点,但我不知道如何以另一种方式做到这一点。
-
acts_as_list正是实现了这一点。 -
哇,太完美了!非常感谢
标签: ruby-on-rails ruby-on-rails-4