if !defined?(records)

records = instance_variable_get("@#{model.model_name.plural}")

end

partial = model_partial(model) partial_record_name = partial.split('/').last.to_sym

if !includes.empty? && can_cache?(model, includes)

json.cache_collection! records, key: proc { |record| cache_key(record, includes) } do |record|
  json.partial!(partial, includes: includes, partial_record_name => record)
end

else

json.array! do
  records.each do |record|
    sub_includes = includes.select do |key, value|
      case value
      when Hash, ActionController::Parameters
        if value.has_key?('when')
          value['when'].all? { |k, v| record.send(k).as_json == v }
        else
          true
        end
      else
        true
      end
    end

    json.partial!(partial, includes: sub_includes, partial_record_name => record)
  end
end

end