我有一个列表记录,每个列表都有许多阶段,用户将创建/删除/移动这些阶段。目前,我在舞台上有一个“位置”列,用于跟踪舞台在列表中的位置,我只是按升序查询它们。但是,在删除某个阶段或需要将某个阶段插入列表中间的情况下,这会出现问题。这样做需要在插入/删除阶段的位置后更新每个阶段的位置,这对我来说不是很干净。
这是我所拥有的准确的例子:
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如何自动更新计数
感谢您的帮助
答案 0 :(得分:0)
事实证明,有一个叫做'acts_as_list'的宝石就是为了这件事。 谢谢D-side!