Я знаю, что у драгоценного камня нет встроенного способа обработки уничтожения зависимостей, такого как активная запись dependant: destroy
Есть ли лучшие способы справиться с разрушением цепи?
Например, прямо сейчас я пытаюсь справиться с уничтожением с помощью моих вопросов и ответов.
Каждый вопрос имеет много ответов и каждый ответ имеет один вопрос
Уничтожить вопрос можно так
event_question = EventQuestion.find(params[:id])
event_question.destroy
но если мне нужно разобраться с ответами, а я делаю это через эту ассоциацию, то мне приходится перебирать и уничтожать каждый. Дополнительным недостатком является необходимость проверки существования зависимых узлов/отношений.
Не лучше ли написать более длинный запрос, чтобы иметь дело с поиском вопросов и ответов и уничтожением их одним махом? (или... можете ли вы?) Я знаю, что вы не можете уничтожить запрос-прокси таким образом (например, event_question.answers.destroy
)
ОБНОВЛЕНИЕ
Я пытался реализовать эти два запроса с помощью удаления, но удаление не выполняется. Нет сообщения об ошибке прямо сейчас. Подглядывая за методом, совпадения выглядят правильно.
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
не позволяет выполнить запрос на втором. Это дает мне неопределенный метод 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
а затем зациклил его и уничтожил каждый ответ, что, казалось, разрушило и ответ, и связь с вопросом. Вопросы и ответы устанавливаются через ассоциации, а не через ActiveRel ... не уверен, что это имеет значение.