カテゴリモデルを作成し、awesome_nested_set
プラグイン(の代わりacts_as_nested_set
)を使用して階層を処理しています。を使用awesome_nested_set
すると、オブジェクトが作成され、保存されてから、セット内に配置されます。同様に、、lft
およびrgt
はparent_id
直接attr_protected
書き込むことができないためです。
ノードをキャッチできるようにしたいセットに配置して、ユーザーに通知するときに、2つの状況が発生しています(まだ考えていないことがあるかもしれません)。
- ノードはそれ自身の子として配置されようとします(
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
、、、またはのいずれかであり、はすべてのsに関連するノードです)。このメソッドはコールバックを起動しますが、移動が発生する前に検証する方法を提供していません。移動を検証するには、コールバックが受信しないターゲットと位置にアクセスする必要があります。:root
:child
:left
:right
target
position
:root
before_move
入居を検証する方法awesome_nested_set
(別のメソッドによってターゲットと位置をbefore_move
コールバックに渡す方法がある)、または検証できる別のネストされたセットプラグインのいずれかを知っている人はいますか?自分のプラグインをフォークしたり書いたりしたくない。