acts_as_tree не уничтожает дочерние элементы модели

Я не эксперт, но разве это не единственный способ сделать это?

MATCH(n:Movie)
UNWIND keys(n) AS movie_keys
RETURN DISTINCT movie_keys
5
задан gsmendoza 6 October 2008 в 00:49
поделиться

2 ответа

Я нашел ошибку. Строка

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)) хотя я не попробовал ни одного из этих решений.

4
ответ дан 14 December 2019 в 19:30
поделиться

children простая has_many ассоциация

Это означает, когда Вы звоните .children, это уже загрузит их из базы данных (если не существующий). Это будет затем кэшировать их.

Я собирался сказать, что Ваш второй 'тест' будет на самом деле смотреть на кэшируемые значения не реальная база данных, но этого не должно происходить, поскольку Вы просто используете Task.count вместо d1.children.count. Hrm

Вы посмотрели на журналы? Они покажут Вам SQL, который выполняется. Можно видеть mysql ошибку там, которая скажет Вам, что продолжается

1
ответ дан 14 December 2019 в 19:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: