2015-08-13 29 views
0

我有一個Ruby on Rails 3應用程序,它使用ancestry gem爲模型提供分層樹結構,並與acts_as_list gem結合以提供顯式定位層次結構的每個級別。Rails:Ancestry + Acts_as_List Gems在更改父對象時無法按預期工作

class Obj < ActiveRecord::Base 
    ... 
    has_ancestry 
    acts_as_list scope: [:ancestry] 
    ... 
end 

此外,我使用的對象下面的方法來改變對象的父:

  • 更改的位置:作品當預期

    # Credit to the author of the ancestry gem for the code. 
    def move_to_child_of(reference_instance) 
         transaction do 
          remove_from_list 
          self.update_attributes!(:parent => reference_instance) 
          add_to_list_bottom 
         save! 
        end 
    end 
    

    一切對象在同一父對象中。

  • 當對象沒有後代時更改對象的父對象。

我有的問題是,改變一個對象,也有後代的父母造成acts_as_list不僅改變物體的位置,而且還改變所有子對象的位置爲好。這會導致所有後代對象的位置不可靠,並導致不必要的數據庫調用。

有沒有什麼辦法來防止這種情況發生,或者是這種預期的行爲?

任何幫助將不勝感激;謝謝!

回答

0

,好像這個問題是已經知道根據這個issue report看來,具有pull request解決它。作爲一種短期修復,我也跟着布蘭頓的建議發佈到拉入請求,並通過聲明一個自定義的範圍從而繞過其中存在錯誤的scope_changed?方法周圍的錯誤得到。

希望這可以幫助某人在將來節省一些時間和灰白的頭髮。

+0

我自己也在遇到這個問題(PR仍然是開放的)。我不認爲你仍然有這些代碼,可以發佈一個要點?我剛剛添加的兩個方法('scope_condition'和'從https://github.com/swanandp/acts_as_list/issues/131#issuecomment-210130196 scope_changed')和我自己的測試中,它似乎使問題消失,但我懷疑我錯過了什麼。你還有'acts_as_list作用域:[:祖先]'?你寫了一個自定義的「移動」方法嗎? –