【发布时间】:2009-06-03 20:45:19
【问题描述】:
我正在创建一个类别模型并使用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 只会引发ActiveRecord::ActiveRecordError 异常,并且消息的描述性不如我希望能够给用户的那样。
awesome_nested_set 有许多节点移动方法,它们都调用move_to(target, position)(其中position 是:root、:child、:left 或:right 之一,而target 是相关的所有positions 但:root 的节点)。该方法触发before_move 回调,但没有提供一种我可以看到的在移动发生之前验证移动的方法。为了验证移动,我需要访问回调未接收到的目标和位置。
有谁知道在awesome_nested_set 中验证移动的方法(通过另一种方法将目标和位置传递给before_move 回调的方法),或者另一个可以让我使用的嵌套集插件证实?我不想派生或编写自己的插件。
【问题讨论】:
标签: ruby-on-rails validation plugins nested-sets