1
我有一個列表記錄,每個列表都有很多階段,這些階段將被用戶創建/刪除/移動。目前,我在舞臺桌上有一個「位置」列,用於跟蹤舞臺在列表中的位置,我只是按升序來查詢它們。但是,在舞臺被刪除或需要插入到列表中間的情況下,這會遇到複雜情況。這樣做需要在插入/刪除階段的位置後更新每個階段的位置,這對我來說不是很乾淨。如何自動訂購/重新訂購has_many關聯?
這裏是什麼,我有一個準系統例如:
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'](https://github.com/swanandp/acts_as_list)實現了這一點。 –
哦哇,這是完美的!非常感謝 – Doug