我正在創建類別模型並使用awesome_nested_set
插件(替換爲acts_as_nested_set
)來處理層次結構。通過awesome_nested_set
,創建對象,然後保存,然後放置在集合中。同樣,lft
,rgt
和parent_id
都是attr_protected
,所以它們不能直接寫入。驗證嵌套集合中的節點移動
我遇到兩種情況將節點進入,我希望能夠趕上這樣我通知用戶(可能有更多的,我沒有考慮過的)設定時:
- 節點試圖放置爲自己的孩子(
self.id == self.parent_id
) - 節點嘗試自己的後代下被移動(
self.descendants.include? self.parent_id == true
)
在這兩種情況下,此舉將失敗,但awesome_nested_set
只會ra ise ActiveRecord::ActiveRecordError
例外,其中的消息不像我希望能夠給用戶那樣描述。
awesome_nested_set
具有許多移動節點的方法,其中所有呼叫move_to(target, position)
(其中position
是:root
,:child
,或:left
和:right
一個target
是所有position
秒,但:root
相關節點)。該方法觸發了一個before_move
回調,但沒有提供一種方法,我可以看到它在移動發生之前進行驗證。爲了驗證移動,我需要訪問回調沒有收到的目標和位置。
有誰知道的任何方式(無論是由具有的方式來傳遞目標和位置通過另一種方法before_move
回調)來驗證awesome_nested_set
的舉動,或另一組嵌套插件,可以讓我驗證?我寧願不分叉或寫我自己的插件。