Rails 3.1: обратный вызов ассоциации after_remove не запускается - PullRequest
0 голосов
/ 06 декабря 2011

У меня есть следующие модели, использующие наследование одной таблицы:

class Test < ActiveRecord::Base
end

class ContainerTest < Test
has_many :subtests, :class_name => 'Test', :foreign_key => 'container_test_id', :before_remove => :delete_if_without_subtests

def delete_if_without_subtests(task)
  ...
end

class BasicTest < Test
end

Я ожидаю, что метод delete_if_without_subtests будет вызываться всякий раз, когда устраняется связь между ContainerTest и BasicTest, но этого не происходит. Если я заменю :before_add вместо :before_remove, будет выполнен обратный вызов, но это бесполезно.

Я понимаю, что мог бы поместить это в модель BasicTest, но это не относится к BasicTest s, и это действительно больше связано с ассоциацией, чем с моделью, поскольку изменение ассоциации BasicTest на другой ContainerTest должен также вызвать этот метод.

Почему метод, зарегистрированный на :before_remove, не вызывается?

1 Ответ

0 голосов
/ 06 декабря 2011

В вашем случае, я думаю, вам нужно :dependent => :restrict, это означает, что этот объект не может быть удален, если у него есть какой-либо связанный объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...