Rails создает хэш из цикла

Мы решили эту проблему (частично), запустив файлы непосредственно в выходной поток, используя потоки blob. Это позволяет избежать проблемы с загрузкой zipping, а затем отправлять и избегать задержки, когда это происходит (мы использовали ICSharpZipLib, reference ). Но это все равно означает маршрутизацию потока через веб-сервер:

  public void ZipFilesToResponse(HttpResponseBase response, IEnumerable files, string zipFileName)
    {
        using (var zipOutputStream = new ZipOutputStream(response.OutputStream))
        {
            zipOutputStream.SetLevel(0); // 0 - store only to 9 - means best compression
            response.BufferOutput = false;
            response.AddHeader("Content-Disposition", "attachment; filename=" + zipFileName);
            response.ContentType = "application/octet-stream";

            foreach (var file in files)
            {
                var entry = new ZipEntry(file.FilenameSlug())
                {
                    DateTime = DateTime.Now,
                    Size = file.Filesize
                };
                zipOutputStream.PutNextEntry(entry);
                storageService.ReadToStream(file, zipOutputStream);
                response.Flush();
                if (!response.IsClientConnected)
                {
                   break;
                }
            }
            zipOutputStream.Finish();
            zipOutputStream.Close();
        }
        response.End();
    }

Служба хранения просто делает это:

public void ReadToStream(IFileIdentifier file, Stream stream, StorageType storageType = StorageType.Stored, ITenant overrideTenant = null)
    {
        var reference = GetBlobReference(file, storageType, overrideTenant);
        reference.DownloadToStream(stream);
    }
private CloudBlockBlob GetBlobReference(IFileIdentifier file, StorageType storageType = StorageType.Stored, ITenant overrideTenant = null)
        {
            var filepath = GetFilePath(file, storageType);
            var container = GetTenantContainer(overrideTenant);
            return container.GetBlockBlobReference(filepath);
        }

0
задан 13 July 2018 в 05:35
поделиться

2 ответа

вы можете получить ожидаемый результат с помощью

hash_data = orders.map do |el|
  [{ y: el[compare], label: "rain_fall_type1" }, { y: el[rain_fall_type], label: "Land_Area" }]
end
hash_data.flatten

, и если вы хотите, чтобы они находились в паре из двух

hash_data.flatten.each_slice(2).to_a
0
ответ дан Ravi Mariya 17 August 2018 в 13:38
поделиться
hash_data = b.map do |el| 
  { y: el[compare], label: "rain_fall_type1" }
  { y: el[rain_fall_type], label: compare }
end

Этот блок карты не приводит к двум хэшам. Он содержит два разных утверждения. Первый создает хэш и отбрасывает его. Второй создает хэш, который возвращается из блока карты, так как это последнее выражение. Первый оператор ничего не делает.

Если вы хотите вернуть несколько хэшей из блока карты или что-то еще, вы должны обернуть их другим объектом, например массивом.

hash_data = b.map do |el| 
  [
    { y: el[compare], label: "rain_fall_type1" },
    { y: el[rain_fall_type], label: compare }
  ]
end
0
ответ дан Schwern 17 August 2018 в 13:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: