0

ジェムには、依存関係の破棄を処理する方法が組み込まれていないことはわかっていますが、アクティブなレコードのようです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 ではなくアソシエーションを通じて設定されます。それが違いを生むかどうかはわかりません。

4

2 に答える 2

2

gem は ActiveModel でコールバックを実装します。したがって、次のことができます。

class EventQuestion
  before_destroy :destroy_answers

  def destroy_answers
    answers.each(&:destroy)
  end
end

明らかに、独自のクエリである各回答に対して破棄を行うため、これは最も効率的ではありません。ただし、回答の前/後の破棄コールバックがすべて呼び出されるという利点があります。

サイファーでそれらを削除したいだけなら、できるはずですanswers(:a, :r).delete(:a, :r).exec

于 2014-12-22T13:45:35.387 に答える
0

Chris と会社は、この機能の PR に取り組んでいdependent destroyます。現在、gem の master ブランチで動作しているようです。それは仕事をしているようです - わかりました!

https://github.com/neo4jrb/neo4j/pull/653

于 2015-01-03T01:28:07.913 に答える