0

私の問題に適合または解決しなかった多くのソリューションを参照した後、この質問をここに投稿します。

JavaScript を使用してフォームの非表示フィールドにデータを入力し、それを Rails コントローラーに送信します。これは通常の変数では問題なく機能しますが、配列では機能しません。これが私がすることです:

Javascript (jQuery):

$("#my_form").submit(function() {
    var testvar = 5;
    var testarr = [];
    testarr[0] = "test data";
    testarr[1] = "other data";

    $('input[name=testvar]').val(testvar);
    $('input[name=testarr]').val(JSON.stringify(testarr));
})

RoR コントローラー:

def create
    testvar = params[:testvar]
    data = params[:testarr]
    testarr = ActiveSupport::JSON.decode(data)
    // other commands
end

testvar では問題なく動作しますが、配列では常にエラーが発生します

can't convert nil into String

私は何を間違っていますか?

リクエストは次のようになります。

{"utf8"=>"✓",
 "authenticity_token"=>"1qFA3NTqUxoI1jusbwrVi5AWIpJz9tbUGR0KuCtNKTs=",
 "testvar"=>"5",
 "testarr"=>"[\"test data\",
 \"other data\"]",
 "commit"=>"Submit my form data"}

よろしくお願いします。

4

1 に答える 1

1

最後に [] を付けて入力フィールドに名前を付けると、Rails はそれを配列として params にマッピングします。

<input type="hidden" name="testarr[]" />

$(....).val(testarr.join(","))

または、結合する代わりにそれぞれに新しい入力を追加します。それらはすべて同じ入力名を持ちます

$(....).submit(....
  $form = $(this)
  testarr.each
    $form.append('<input type="hidden" name="testarr[]" value="...itemValue..." />')

コントローラ内

params[:testarr].each do ....

iPad で入力しました。不完全なコードをお許しください。うまくいけば、いくつかのアイデアが得られます

于 2012-06-17T17:16:47.563 に答える