Open janko opened 1 year ago
Here is a self-contained example demonstrating the issue:
require "active_record" require "paranoia" ActiveRecord.version # => #<Gem::Version "6.1.6.1"> ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:") ActiveRecord::Schema.define do create_table :tenants do |t| end create_table :permission_groups do |t| end create_table :permission_group_memberships do |t| t.references :tenant, foreign_key: true t.references :permission_group, foreign_key: true t.datetime :deleted_at end end class Tenant < ActiveRecord::Base has_many :permission_group_memberships has_many :permission_groups, through: :permission_group_memberships end class PermissionGroupMembership < ActiveRecord::Base acts_as_paranoid belongs_to :tenant belongs_to :permission_group end class PermissionGroup < ActiveRecord::Base end tenant = Tenant.create! permission_group_1 = PermissionGroup.create! permission_group_2 = PermissionGroup.create! permission_group_membership_1 = PermissionGroupMembership.create!( tenant: tenant, permission_group: permission_group_1, ) ActiveRecord::Base.logger = Logger.new($stdout) tenant.update!(permission_group_ids: [permission_group_2.id])
Here I would expect the removed permission group membership to be soft-deleted, but it gets hard-deleted.
D, [2023-01-30T15:05:11.784742 #57434] DEBUG -- : TRANSACTION (0.1ms) begin transaction D, [2023-01-30T15:05:11.784887 #57434] DEBUG -- : PermissionGroup Load (0.1ms) SELECT "permission_groups".* FROM "permission_groups" WHERE "permission_groups"."id" = ? [["id", 2]] D, [2023-01-30T15:05:11.787746 #57434] DEBUG -- : PermissionGroup Load (0.0ms) SELECT "permission_groups".* FROM "permission_groups" INNER JOIN "permission_group_memberships" ON "permission_groups"."id" = "permission_group_memberships"."permission_group_id" WHERE "permission_group_memberships"."deleted_at" IS NULL AND "permission_group_memberships"."tenant_id" = ? [["tenant_id", 1]] D, [2023-01-30T15:05:11.788246 #57434] DEBUG -- : PermissionGroupMembership Destroy (0.0ms) DELETE FROM "permission_group_memberships" WHERE "permission_group_memberships"."deleted_at" IS NULL AND "permission_group_memberships"."tenant_id" = ? AND "permission_group_memberships"."permission_group_id" = ? AND "permission_group_memberships"."deleted_at" IS NULL [["tenant_id", 1], ["permission_group_id", 1]] D, [2023-01-30T15:05:11.788759 #57434] DEBUG -- : PermissionGroupMembership Create (0.0ms) INSERT INTO "permission_group_memberships" ("tenant_id", "permission_group_id") VALUES (?, ?) [["tenant_id", 1], ["permission_group_id", 2]] D, [2023-01-30T15:05:11.788916 #57434] DEBUG -- : TRANSACTION (0.0ms) commit transaction
Here is a self-contained example demonstrating the issue:
Here I would expect the removed permission group membership to be soft-deleted, but it gets hard-deleted.