2013-02-20 27 views
6

投稿#新しいアクションのフォームを自動保存しようとしています。ポスト#自動保存にPOSTしてから、first_or_createをチェックして、Postsテーブルにレコードを保存/更新します。私の問題は、フォームからPOSTパラメータにアクセスできなくなったことです。私はそうのようにそれを行うにしようとしています:AJAXを使用してRailsでフォームを自動保存する

$(function() { 
    if ($("#new_post").length > 0) { 
    setTimeout(autoSavePost, 60000); 
    }  
}); 

function autoSavePost() { 
    $.ajax({ 
    type: "POST", 
    url: "/posts/autosave", 
    dataType: "script", 
    success: function(data) { 
     console.log(data); 
    } 
    }); 
    setTimeout(autoSavePost, 60000); 
} 

私はこのルートがあります。アクションと::コントローラを

post 'posts/autosave', as: :autosave_post_path 

問題があるが、サーバのログのみを含むものとしてparamsハッシュを示しています。 POSTデータの一部として送信されたものに相当するものにはどうすればアクセスできますか。

答えて

12

あなたがserializeメソッドを介して、同様dataのparamに合格する必要があります。

$.ajax({ 
    type: "POST", 
    url: "/posts/autosave", 
    data: $("#new_post").serialize(), 
    dataType: "script", 
    success: function(data) { 
    console.log(data); 
    } 
}); 
+0

あなたは男です!本当にありがとう。あなたがリンクしているドキュメントを見て、正確に何をしているのかはっきりしていません。再度、感謝します。 – mackshkatz

+2

".serialize()メソッドは、標準のURLエンコーディング表記でテキスト文字列を作成します。"つまり、フォームの内容を 'param1 = value1&param2 = value2&...&paramN = valueN'としてシリアル化し、Railsはそれをオブジェクトに逆シリアル化します。 – moonwave99

+1

@mackshkatzシリアル化は、フォームのすべてのフォーム要素をループし、1つの長い文字列に送信されるデータを収集すると考えることができます。これはPOSTリクエストであなたのレールコントローラに送られます。それがGETリクエストの場合は、フォームフィールドに入力された値に基づいて、クエリ文字列を作成するのと同じことになります。 – ChrisC

1

serialize()関数を見てみましょう:http://api.jquery.com/serialize/:これを使用して、コントローラにパラメータとして渡すデータの配列を作成できます。

関連する問題