44 lines
886 B
Ruby
44 lines
886 B
Ruby
# frozen_string_literal: true
|
|
|
|
module GemExtensions
|
|
module ActiveRecord
|
|
module DisableJoins
|
|
class Relation < ::ActiveRecord::Relation
|
|
attr_reader :ids, :key
|
|
|
|
def initialize(klass, key, ids)
|
|
@ids = ids.uniq
|
|
@key = key
|
|
super(klass)
|
|
end
|
|
|
|
def limit(value)
|
|
records.take(value) # rubocop:disable CodeReuse/ActiveRecord
|
|
end
|
|
|
|
def first(limit = nil)
|
|
if limit
|
|
records.limit(limit).first
|
|
else
|
|
records.first
|
|
end
|
|
end
|
|
|
|
def load
|
|
super
|
|
records = @records
|
|
|
|
records_by_id = records.group_by do |record|
|
|
record[key]
|
|
end
|
|
|
|
records = ids.flat_map { |id| records_by_id[id.to_i] }
|
|
records.compact!
|
|
|
|
@records = records
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|