Rails-生成CSV的AJAX调用控制器方法

时间:2018-09-18 15:02:52

标签: ruby-on-rails ajax csv export-to-csv

我的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 DOES被触发!这是该方法的代码:

    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

在上述情况下,它完全可以正常工作-但问题是我需要在gen_csv_selected中使用info []数组。我尚未实现该方法的这一部分-但要点是,在最重要的情况下,我无法使用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的任何帮助?

0 个答案:

没有答案