Это странно. Я использую Rolify + CanCan + Devise в приложении rails 3.2. Мой пример использования прост. Я хочу, чтобы пользователь имеет только один роль в то время, таким образом, чтобы изменить свою роль, я сделать что-то вроде этого:Удалить удаление из таблицы ролей?
user.remove_role "admin"
user.add_role "associate"
Странное мне в том, что когда я делаю это, роль «администратор» получает удалены из таблицы Роли. Почему это должно быть? Я не хочу полностью исключать эту роль, только определенную роль от пользователя. Что я делаю не так?
Вот SQL. Обратите внимание на последнее удаление из ролей высказывания:
3] pry(main)> u.remove_role "sub_admin"
Role Load (0.1ms) SELECT "roles".* FROM "roles" INNER JOIN "users_roles" ON "roles"."id" = "users_roles"."role_id" WHERE "users_roles"."user_id" = 2 AND "roles"."name" = 'sub_admin'
(0.0ms) begin transaction
(0.3ms) DELETE FROM "users_roles" WHERE "users_roles"."user_id" = 2 AND "users_roles"."role_id" IN (2)
(1.9ms) commit transaction
User Load (0.1ms) SELECT "users".* FROM "users" INNER JOIN "users_roles" ON "users"."id" = "users_roles"."user_id" WHERE "users_roles"."role_id" = 2
(0.0ms) begin transaction
SQL (2.1ms) DELETE FROM "roles" WHERE "roles"."id" = ? [["id", 2]]
(0.6ms) commit transaction
Где я могу это поставить? Как новый контроллер? –
Это не новый контроллер, а Active Recrod Model для таблицы соединений, который обычно не имеет этого. – semiomant