Module: ActiveRecord::QueryMethods

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

Instance Method Summary collapse

Instance Method Details

#build_arelObject



218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
# File 'lib/activerecord-multi-tenant/query_rewriter.rb', line 218

def build_arel
  arel = build_arel_orig

  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



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

alias :build_arel_orig :build_arel