Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

It doesn't soft-delete records when updating collection_ids when using has_many with :through #538

Open
janko opened this issue Jan 30, 2023 · 0 comments
Labels

Comments

@janko
Copy link

janko commented Jan 30, 2023

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants