Module: ActiveRecord::QueryMethods

Defined in:
lib/activerecord-multi-tenant/query_rewriter.rb

Instance Method Summary collapse

Instance Method Details

#build_arel(*args) ⇒ Object



236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
# File 'lib/activerecord-multi-tenant/query_rewriter.rb', line 236

def build_arel(*args)
  arel = build_arel_orig(*args)

  if MultiTenant.current_tenant_id && !MultiTenant.with_write_only_mode_enabled?
    visitor = MultiTenant::ArelTenantVisitor.new(arel)
    visitor.contexts.each do |context|
      node = context.arel_node
      context.unhandled_relations.each do |relation|
        model = MultiTenant.multi_tenant_model_for_table(relation.arel_table.table_name)
        enforcement_clause = MultiTenant::TenantEnforcementClause.new(relation.arel_table[model.partition_key])

        case node
        when Arel::Nodes::Join #Arel::Nodes::OuterJoin, Arel::Nodes::RightOuterJoin, Arel::Nodes::FullOuterJoin
          node.right.expr = node.right.expr.and(enforcement_clause)
        when Arel::Nodes::SelectCore
          if node.wheres.empty?
            node.wheres = [enforcement_clause]
          else
            node.wheres[0] = enforcement_clause.and(node.wheres[0])
          end
        else
          raise "UnknownContext"
        end
      end
    end
  end

  arel
end

#build_arel_origObject



235
# File 'lib/activerecord-multi-tenant/query_rewriter.rb', line 235

alias :build_arel_orig :build_arel