2015-10-29 94 views
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自動更新計數

感謝您的幫助

+0

這就是我一直這樣做的。也許有一個acts_as_something會實現這一點,但我不明白如何以另一種方式做到這一點。 –

+0

['acts_as_list'](https://github.com/swanandp/acts_as_list)實現了這一點。 –

+0

哦哇,這是完美的!非常感謝 – Doug

回答

0

原來有一個叫這個確切的事情做「acts_as_list」寶石。 謝謝D方!