Я не эксперт, но разве это не единственный способ сделать это?
MATCH(n:Movie)
UNWIND keys(n) AS movie_keys
RETURN DISTINCT movie_keys
Я нашел ошибку. Строка
d1 = create_task(:parent_id => @root.id, :sort_order => 2)
создает d1. Это звонит before_save
обратный вызов, который в свою очередь звонит self.children
. Как Orion, на который указывают, это кэширует детей d1.
Однако в этой точке, d1 еще не имеет никаких детей. Таким образом, кэш d1 детей пуст.
Таким образом, когда я пытаюсь уничтожить d1, программа пытается уничтожить дочерние элементы d1. Это встречается с кэшем, находит, что это пусто, и результат не уничтожает d2, d3, и d4.
Я решил это путем изменения созданий задачи как это:
@root.children << (d1 = new_task(:sort_order => 2))
@root.save!
Это работало так, я соглашаюсь с ним :) Я думаю, что также возможно зафиксировать это любой перезагрузкой d1 (d1.reload
) или self.children (self.children(true)
) хотя я не попробовал ни одного из этих решений.
children
простая has_many ассоциация
Это означает, когда Вы звоните .children
, это уже загрузит их из базы данных (если не существующий). Это будет затем кэшировать их.
Я собирался сказать, что Ваш второй 'тест' будет на самом деле смотреть на кэшируемые значения не реальная база данных, но этого не должно происходить, поскольку Вы просто используете Task.count
вместо d1.children.count
. Hrm
Вы посмотрели на журналы? Они покажут Вам SQL, который выполняется. Можно видеть mysql ошибку там, которая скажет Вам, что продолжается