記事投稿日: 2013年3月25日
非同期での簡単な検索や更新処理なら
ヘルパーでできる面もありますが、
もっと本格的な非同期処理を行いたいという場合、
既出のマニュアルでは詳しい説明がありませんでした。
いろいろ調べて、現在実践している結果をまとめています。
例)ユーザー管理
(Users_controller.rb)では、
「Users_edit_form.js」で
jQueryのAjax処理を記述しています。
Ajaxの記述は通常どおりですが、
レスポンスを受け取って処理を行う
successの部分は省きます。
理由ははっきりしていないのですが、
Railsではエラーになるからです。
$.ajax({ type: "POST", // 送信方法 url: "/products/del", // 送信先 data: { // 送信するパラメータ "mode": mode, "del_id": del_id, "user_id": user_id } });
※注意点
ajaxの送信先となるurlのパスも、
config/routes.rb で設定しておかないとエラーとなります。
送信先のコントローラのアクションでは、
jQueryから送信されてきた値を
params[:del_id] といった形で受け取ります。
アクションで受け取った後は
通常の処理を記述することができます。
さて、Ruby on Rails では、
通常のjQueryのAjaxの書き方では、
スクリプトの処理の結果、得られたレスポンスを
処理することができません。
次にすることは、アクションと同じ名前の
js.erbファイルを用意することです。
先の例だと、del アクションなので、
そのレスポンスを受け取り、処理を行うファイルは
「del.js.erb」ファイルとなります。
この中ではテンプレート変数が使用できますので、
JavaScriptもしくはjQueryの記述の中に変数を埋め込む形で
処理を記述します。
successでレスポンスを処理できない理由としては
ルーティングの問題なのかなと思います。
送信する時はconfig/routes.rbで指定したところへ
流すだけなので問題ありませんが、戻ってくる時は…?
ともかく、結論としては
successの代わりに、アクションと同名の
「js.erb」ファイルを用意する、以上です。
ひと手間かかりますが、これで今までどおりの
非同期処理を行うことができました。
※Railsをはじめてまだ数ヶ月ですので、
間違いがありましたら、ご指摘のほど、
よろしくお願いいたします。
コメントを残す