6

Rubyコントローラーに配列のJavaScript配列を送信したいと思います。私は少し迷っています。私の質問はコントローラーにあります。これが私がこれまでに持っているものです:

(totalChanges は配列の配列です。JSON.stringify(totalChanges) は次のようになります。

[[4,2,"","15"],[4,3,"","12"],[4,4,"","14"]]

アプリ/ビュー/index.html.erb:

<div id="dataTable" class="dataTable" style="width: 680px;height: 300px; overflow: scroll"></div>
<button>Save!</button>
<script>
    var first = true;
    var totalChanges = new Array();
    $("#dataTable").handsontable({
         //...some code that generates appropriate array totalChanges
    });
    var data = //..some code
    $("#dataTable").handsontable("loadData", data);
    $(function() {
            $( "button").button();
            $( "button" ).click(function() { 
                    alert("clicked"); 
                    $.ajax({
                            type: "POST",
                            url: "/qtl_table/save",
                            data: {total_changes: JSON.stringify(totalChanges)},
                            success: function() { alert("Success!"); }
                    });
            });
    });

</script>

app/controllers/qtl_table_controller.rb:

def save
  //Adding some things suggested by answers:
  logger.debug "\n#{params[:total_changes].first}, #{params[:total_changes][1]}\n"
  ar = JSON.parse(params[:total_changes])
end

私はこれらのエラーで終わります:

NoMethodError (You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.first):

編集: contentType: "application/json" と Accepts: "application/json" もあり、それらを取り出したときにすべてがうまくいきました。みんなありがとう :)

4

3 に答える 3

12

JSON.parseあなたの友達です:

ar = JSON.parse(params[:total_changes])
#=> [[4, 2, "", "15"], [4, 3, "", "12"], [4, 4, "", "14"]]

ほとんどの場合、AJAX 呼び出しを次のように更新する必要があります。

$.ajax({
  type: "POST",
  url: "/qtl_table/save",
  data: { total_changes: JSON.stringify(totalChanges) },
  success: function() { alert("Success!"); }
});

配列パラメーターtotal_changes名を指定します。

于 2012-06-26T15:51:28.983 に答える
4

javascriptで、JSONデータのルートノードを割り当てます

data: {qtls: totalChanges}

今コントローラーで:

params[:qtls] # contains the Ruby array
params[:qtls].first # [4,2,"","15"]
于 2012-06-26T15:59:31.830 に答える
1

渡されるデータは、params 環境変数のどこかに配置する必要があります。それがどの環境変数にあるかわからないようですが、それがどれであるかがわかっている場合、その変数は、渡す変数、あなたの場合は配列であるjson文字列を保持します。アクセス方法がわかったら、更新/作成/保存など、必要なことをすべて行ってから、インデックスへのリダイレクトを実行できます。

redirect_to qtl_tables_path

通常、変数の名前がわからない場合は、params を調べると、どのように渡されているかがわかります。このようなことを知り、コントローラーに渡されるすべてのものを確認したい場合は、ビューを持つ別のコントローラー アクションに送信するようにします。そのビューでは、次のようなものを配置します。

<%= debug params %>

また

<%= inspect params %>

そうすれば、渡されたパラメーターが出力されます。その変数がどこにあり、どのようにパラメーターにアクセスし、正しいコントローラーで使用するかを確認できます。

これは理にかなっていますか?この投稿の回答も役立つはずです。

Rails:リクエストパラメータを出力するにはどうすればよいですか?

Railsロガーを使用して印刷する良い例もいくつかあります。

その答えがお役に立てば幸いです。

于 2012-06-26T15:55:20.810 に答える