カテゴリモデルを作成し、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:righttargetposition:rootbefore_move
入居を検証する方法awesome_nested_set(別のメソッドによってターゲットと位置をbefore_moveコールバックに渡す方法がある)、または検証できる別のネストされたセットプラグインのいずれかを知っている人はいますか?自分のプラグインをフォークしたり書いたりしたくない。