Open AmShaegar13 opened 2 years ago
This seems like a great idea to be able to customize the base class
Similar problem here except with a MultiTenant gem. Basically my group hierarchies now also need a column for the tenant id. It's not a huge deal (I can add that column) but it is a breaking change.
New project, same problem. Found my old issue here because I had the same problem again. ClosureTree is not compatible with ActsAsTenant because it uses raw SQL here. I need hierarchy_class
to inherit from ActiveRecord::Base in this case to ignore multi tenancy in Hierarchy classes.
@AmShaegar13 what versions do you use ?
I have a full rewrite incoming, it will support only 7.x for now.
acts_as_tenant (1.0.1)
closure_tree (7.4.0)
rails (7.1.3.2)
The current workaround is to use acts_as_tenant :account
in each model instead of ApplicationRecord
. Which works, but you could forget about that when adding new models. That's why I intended it to be inherited from ApplicationModel.
Overview
Recent changes introduced in v7.4.0 led to a regression in combination with paper_trail. Specifically, this change:
https://github.com/ClosureTree/closure_tree/commit/f3b33f81157ccf002b8c2774b30dc35bd4722610
Description
We need to track changes to each of our models. For this, we use paper_trail in a base model which is then inherited from. Prior to this change, the ModelHierarchy models did not inherit from our base class. Now they do. This activates paper_trail in the ModelHierarchy models which does not work because paper_trail needs a primary key column. The resulting error when creating a new instance of Model is:
I worked around this by activating paper_trail conditionally only.
However, I wonder if you would like to add an option to use the desired base model with
superclass
being the default. Like:Maybe one could even add this globally to the initializer.
Steps to reproduce
I created a simple rails application to demonstrate the problem: Demo App ApplicationRecord (with paper_trail) Node < ApplicationRecord (with closure_tree)
database.yml
rails db:migrate
rails c
Node.create!(name: 'Foo')