Ruby on Rails 上での非同期(Ajax)処理

カテゴリ: Rails, Ruby

記事投稿日: 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をはじめてまだ数ヶ月ですので、
間違いがありましたら、ご指摘のほど、
よろしくお願いいたします。








コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA




トップに戻る