変ですね。Rails 3.2 アプリで Rolify + CanCan + Devise を使用しています。私のユースケースは単純です。ユーザーが一度に 1 つの役割だけを持つようにしたいので、役割を変更するには、次のようにします。
user.remove_role "admin"
user.add_role "associate"
私にとって奇妙なことは、これを行うと、役割「管理者」が役割テーブルから削除されることです。これはなぜでしょうか?役割を完全に排除したくはありません。ユーザーから特定の役割だけを取り除きたいのです。私は何を間違っていますか?
これがSQLです。最後の delete from roles ステートメントに注意してください。
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