ジェムには、依存関係の破棄を処理する方法が組み込まれていないことはわかっていますが、アクティブなレコードのようですdependant: destroy
チェーンの破壊に対処するより良い方法はありますか?
たとえば、今、私は Q+A で破壊に対処しようとしています。
各質問には多くの回答があり、各回答には 1 つの質問があります
質問の破棄は次のように行うことができます
event_question = EventQuestion.find(params[:id])
event_question.destroy
しかし、答えを処理する必要があり、この関連付けを介してそれを行う場合は、ループしてそれぞれを破棄する必要があります。追加の弱点は、依存ノード/関係が存在するかどうかを確認する必要があることです。
質問と回答の両方を見つけて一度に破棄する処理を行うには、より長いクエリを作成する方がよいでしょうか? (または...できますか?)クエリプロキシをそのように破壊できないことは知っています(例event_question.answers.destroy
)
アップデート
これら 2 つのクエリを delete で実装しようとしましたが、delete は実行されません。現在、エラーメッセージはありません。メソッドをこじ開けると、一致は正しく見えます。
event.users(:u,:rel).query.match("()-[r3]-u").delete(:r3).exec
event.event_questions(:q).event_answers(:a).query.match("event-[r0]-(), q-[r1]-(), a-[r2]-()").delete(:q, :a, :event).exec
更新 2
これは最初の のサイファー クエリですevent.users
。
MATCH (event13:`Event`), (u:`User`), event13-[rel:`invited`]-(u:`User`), ()-[r3]-u WHERE ID(event13) = {ID_event13} DELETE r3"
それは右に見えますか?しかし、削除は実行されないようです。as
またはをアタッチquery_as
すると、クエリが 2 番目のクエリを通過できなくなります。それは私に未定義の方法を与えますas
最後の更新
別の質問に移動する前の最後の更新。
奇妙なことに、これを介して関係を削除する最初のクエリを取得できます
event.users(:u,:r3).query.match("()-[r]-u").delete(:r3).exec
ただし、この次のクエリは質問と回答を削除しません。
event.event_questions(:q).event_answers(:a).query.match("q-[r1]-(), a-[r2]-()").delete(:q, :a).exec
一致が必要な理由は完全にはわかりませんが、それがないと実行されません。質問/回答コントローラーに破棄関数を記述したとき、実際に関係を削除する必要はありませんでした。でも、何かおかしなことをしたのかもしれません。
私は実際にこれをやった
answers = event_question.event_answers
それをループして各回答を破壊しました。これにより、回答と質問との関係の両方が破壊されたように見えました。Q+A は ActiveRel ではなくアソシエーションを通じて設定されます。それが違いを生むかどうかはわかりません。