1

私の見解では、隠しフィールドにハッシュの配列を保存します

    <div>
       <%= hidden_field_tag :data_filtered, :value => @data_filtered %>
    </div>

私のJavaScriptは

$(document).ready(function(){
    freezeTopRow($('#dataTable'));
    $("#export").click(function(){
        var data1 = $("#data_filtered").val()
        $.ajax({
            type: "POST",
            url: "export",
            dataType: 'json',
            data: {data_filtered: data1}
        });
    });
});

私のコントローラーは

  def export
    CSV.open("data.csv", "wb") do |csv|
       csv << params[:data_filtered].first.keys
       @data_filtered.each do |hash|
       csv << hash.values
      end
    end
  end

コントローラーに返された後に params[:data_filtered] を表示すると、次の文字列が表示されます。

 "{:value=>[{"a"=>nil, "b"=>nil, "c"=>0}]}"

しかし、私はそれを元の形式 (ハッシュの配列、この場合は 1 つのハッシュのみ) にしたいと考えています。問題の半分は :value です。それを保存したくないので、それを解析して配列だけを取得する方法がわかりません。基本的に欲しい

[{"a"=>nil, "b"=>nil, "c"=>0]
4

1 に答える 1

1

文字列 (ハッシュを含む) の代わりに json データを送信してみてください。ajax経由で文字列を送信する場合、コントローラーでは、重大なevalセキュリティの問題があるparamsを使用する必要があります。

使用eval: (使用しないでください)

eval('{:value=>[{"a"=>nil, "b"=>nil, "c"=>0}]}') will produce the original hash: {:value=>[{"a"=>nil, "b"=>nil, "c"=>0}]}
于 2013-07-01T17:47:45.760 に答える