Если я правильно прочитал направляющие рельсов, обратный вызов before_destroy, который возвращает false, остановит уничтожение объекта с помощью команды отката.
Однако, хотя сам объект не удаляется, я обнаружил, что все объекты в отношении HABTM для этого объекта являются. Как я могу предотвратить это?
Вот соответствующий блок кода:
class UserGroup < ActiveRecord::Base
# Associations
has_and_belongs_to_many :users, :join_table => "user_group_membership"
attr_protected :is_default
# Callbacks
before_destroy :destroy_associations
def destroy_associations
if self.is_default?
errors.add(:base,"You can't delete the default")
return false
end
self.users.clear
end
end
Теперь, когда я вызываю команду destroy для группы "is_default", я получаю правильное сообщение об ошибке, добавленное в базу, объект UserGroup НЕ уничтожается, но все ассоциации в коллекции: users очищаются.
Я знаю, что код "self.users.clear" никогда не достигается - так почему я теряю свою коллекцию HABTM?
Если это поможет, я использую JRuby 1.9 с базой данных mssql.