Rails - AJAX-вызов метода контроллера, который создает CSV - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть такой элемент в моем файле erb:

<%= submit_tag "Generate Report (Selected Assets)", :type => 'button', :id => "selectgenbutton" %>

Тогда у меня есть фрагмент в том же файле erb, который выглядит следующим образом:

<script>

$(document).ready(function() {

var table = $('#assets').DataTable();

(...various unrelated stuff)

    $('#selectgenbutton').click( function () {
    info = [];
    for (var i = 0; i < table.rows('.selected').data().length; i++) { 
       info.push(table.rows('.selected').data()[i][0]);
    }

    $.ajax({
        url: "/gen_csv_selected/",
        data: {info:info}
    }); 

} );



} );

 </script>

Как вы могли быожидайте, у меня есть четко определенные данные и т. д. - я не буду показывать этот код здесь.В моем route.rb есть:

  match '/gen_csv_selected/' => 'assets#gen_csv_selected', via: :get

В моем AssetsController запускается gen_csv_selected!Вот код для этого метода:

    def gen_csv_selected
         `echo "GEN CSV SELECTED triggered with: #{params.to_s}\n" >> /opt/pesto/current/tveadslog.txt`
         send_data Asset.to_csv, stream: 'true', filename: "assets-#{DateTime.now.strftime('%Y%m%d%H%M%S')}.csv" 
    end

Модель ресурсов имеет четко определенную функцию to_csv - поверьте мне, она работает.Я знаю, что это работает, потому что у меня есть сценарий, в котором он работает нормально - я вызываю его через:

<%= button_to "Generate Report (All Assets)", assets_path(format: "csv"), method: :get, :form => { :id => "genbutton" } %>

А затем по индексу в AssetsController:

    def index
    respond_to do |format|
        format.csv { 
            send_data Asset.to_csv, stream: 'true', filename: "assets-#{DateTime.now.strftime('%Y%m%d%H%M%S')}.csv" 
        }
    end
end

Это работает полностьюхорошо в приведенном выше сценарии - но проблема в том, что мне нужно использовать массив info [] в gen_csv_selected.Я еще не реализовал эту часть метода - но дело в том, что я не могу использовать button_to и response_to в моем основном сценарии - вместо этого мне нужно использовать Ajax-вызов для вызова метода контроллера, который загружает CSV в браузер.И проблема в том, что из моего эха я вижу, что мой метод запускается ... но в браузер не приходит CSV.Я даже захожу в свой журнал

Started GET "/gen_csv_selected/?info%5B%5D=1" for 127.0.0.1 at 2018-09-18 10:52:47 -0400
 Processing by AssetsController#gen_csv_selected as */*
   Parameters: {"info"=>["1"]}
    (...irrelevant SQL)
     Sent data assets-20180918105247.csv (0.9ms)
    Completed 200 OK in 17ms (Views: 0.5ms | ActiveRecord: 1.1ms)

Так что он утверждает, что мне прислали CSV ... но не CSV.Любая помощь о том, как использовать вызов Ajax, чтобы помочь в создании CSV?

...