From f8b70366c2d393740e8bf286d14e8bc9bd3e7814 Mon Sep 17 00:00:00 2001 From: muryoimpl Date: Mon, 27 May 2024 10:41:50 +0900 Subject: [PATCH] Fix TypeError: Cannot visit Arel::SelectManager Add visit_Arel_SelectManager to MultiTenant::ArelVisitorsDepthFirst in reference to https://github.com/rails/rails/blob/1b3fc3c82e36a1c5f19f174e318166a11bd0b301/activerecord/lib/arel/visitors/to_sql.rb#L358-L361 --- .../arel_visitors_depth_first.rb | 4 ++++ .../record_finding_spec.rb | 13 +++++++++++++ 2 files changed, 17 insertions(+) diff --git a/lib/activerecord-multi-tenant/arel_visitors_depth_first.rb b/lib/activerecord-multi-tenant/arel_visitors_depth_first.rb index a0c0f3b2..3d76d94f 100644 --- a/lib/activerecord-multi-tenant/arel_visitors_depth_first.rb +++ b/lib/activerecord-multi-tenant/arel_visitors_depth_first.rb @@ -165,6 +165,10 @@ def visit_Arel_Nodes_SelectCore(obj) visit obj.havings end + def visit_Arel_SelectManager(obj) + visit obj.ast + end + def visit_Arel_Nodes_SelectStatement(obj) visit obj.cores visit obj.orders diff --git a/spec/activerecord-multi-tenant/record_finding_spec.rb b/spec/activerecord-multi-tenant/record_finding_spec.rb index d5b46074..cd08f8d7 100644 --- a/spec/activerecord-multi-tenant/record_finding_spec.rb +++ b/spec/activerecord-multi-tenant/record_finding_spec.rb @@ -62,6 +62,19 @@ end end + it 'can search for tenant object using subquery with Arel' do + account = Account.create! name: 'test' + project = account.projects.create! name: 'test' + + MultiTenant.with(account) do + project_table = Project.arel_table + subquery = project_table.project(project_table[:id]) + query = Project.where(Arel::Nodes::InfixOperation.new('IN', project_table['id'], subquery)) + + expect(Project.where(id: query).to_a.first).to eq project + end + end + context 'model with has_many relation through multi-tenant model' do let(:tenant1) { Account.create! name: 'Tenant 1' } let(:project1) { tenant1.projects.create! }