Rails 3: HABTM, уничтожить и обратный вызов before_destroy - PullRequest
2 голосов
/ 05 сентября 2011

Если я правильно прочитал направляющие рельсов, обратный вызов 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.

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