はじめに
RailsでAjax処理で画面を更新する方法を簡単に紹介します。
View(遷移元)の設定
link_toやform_forなどで remote: true を指定します。
(下記の例ではusers_controller.rbのupdateアクションが実行されます)
1 | <%= form_for @user, method: :patch, remote: true do |f| %> |
Controllerの実装
コントローラーでは特別な処理はありません。
通常通りの更新処理を書きます。
View(遷移先)の実装
update.js.erbファイルにJavaScriptの処理を書いていきます。
.attrなどで個別に要素を変更するだけでなく、下記のようにpartialとして切り出したテンプレートを指定して画面を更新することもできます。
1 | $('#user_status').html("<%= j (render 'users/status') %>"); |
このようにすると、id=”user_status”の子要素としてレンダリングしてくれます。
partialとして切り出したテンプレート内のidを指定してしまうと、Ajax遷移するたびにどんどんネストされていくので注意が必要です。
また、上記のようにAjaxで遷移した場合redirect_toでリダイレクトできません。
更新失敗などの時にリダイレクトしてたい場合は、下記のようにするとできます。
1 | window.location.replace('<%= users_path %>'); |
参考
http://qiita.com/mm36/items/684f36f22e79d0a27ae9
http://qiita.com/geshi/items/536956b8bed7c2126187
さいごに
RailsでAjax処理で画面を更新する方法を簡単に紹介しました。