我正在创建一个 Category 模型并使用awesome_nested_set
插件(替代acts_as_nested_set
)来处理层次结构。使用awesome_nested_set
,创建对象,然后保存,然后放置在集合中。同样lft
,rgt
和parent_id
areattr_protected
所以它们不能被直接写入。
将节点放入我希望能够捕获的集合中时,我遇到了两种情况,以便通知用户(可能还有更多我还没有想到的):
- 尝试将节点作为自己的子节点放置 (
self.id == self.parent_id
) - 试图将一个节点移动到它自己的后代之下 (
self.descendants.include? self.parent_id == true
)
在这两种情况下,移动都会失败,但awesome_nested_set
只会引发ActiveRecord::ActiveRecordError
异常,并且消息的描述性不如我希望能够给用户的那样。
awesome_nested_set
有许多节点移动方法,它们都调用move_to(target, position)
(其中position
一个是:root
、或:child
,并且是所有s 的相关节点,但)。该方法会触发回调,但没有提供一种我可以看到的在移动发生之前验证移动的方法。为了验证移动,我需要访问回调未收到的目标和位置。:left
:right
target
position
:root
before_move
有谁知道验证移动的awesome_nested_set
方法(通过一种方法将目标和位置传递给before_move
另一种方法的回调),或者另一个可以让我验证的嵌套集插件?我不想分叉或编写自己的插件。