Rails で Ajaxかどうかを見分ける方法 ( Ajaxで .html.erbが読み込まれるのを防ぐ)

2017年12月22日

 

Railsでajax送信でポップアップを表示する場合、

 

通常は、*.js.erb などが読み込まれるのですが、
ページ内のリンクやボタンではなく、
URLを直打ちなどした場合に

 

Controllerが通常のリクエスト通り、
*.html.rbファイルを読み込んでしまい
MissingTemplateになってしまうといった場合があると思います。

 

これを避けるには
Ajaxのリクエスト → 通常通り
それ以外 → 元のページにリダイレクト
のようにするのが有効です。



class ExamplesController < ApplicationController

  def index 
      unless request.xhr?
         redirect_to [ 元のページ ]
      end 
  end
end

 

コードでは、
以下でAjaxリクエストかどうか判定しています。

 

request.xhr?

 

 
ちなみにPOST/GETの判定は

request.get?
request.post?

でできます。