У меня есть эта модель:
class User < ActiveRecord::Base
has_and_belongs_to_many :roles
before_destroy do |u|
if u.superadmin? and User.joins(:roles).where(:roles => {:superadmin => true}).count == 1
u.errors.add(:base, "cannot delete last admin user")
return false
end
return true
end
end
class Role < ActiveRecord::Base
has_and_belongs_to_many :users
end
Когда я пытаюсь удалить последний superadmin, обратный вызов before_destroy добавляет к массиву ошибок и возвращает false.Я получаю сообщение об ошибке в контроллере, все, кажется, в порядке.
За исключением Rails3 удаляет меня запись из таблицы соединения . Почему ?Я вернул false, так как я возвращаю false, он должен не продолжать с удаления.Вот журнал:
SQL (0.2ms) SELECT COUNT(*) FROM "users" INNER JOIN "roles_users" ON "roles_users"."user_id" = "users"."id" INNER JOIN "roles" ON "roles"."id" = "roles_users"."role_id" WHERE "roles"."superadmin" = 't'
AREL (0.4ms) DELETE FROM "roles_users" WHERE "roles_users"."user_id" = 1 AND "roles_users"."role_id" IN (1, 4)
Organization Load (0.4ms) SELECT * FROM "organizations" INNER JOIN "organizations_users" ON "organizations".id = "organizations_users".organization_id WHERE ("organizations_users".user_id = 1 )
Спасибо за помощь.