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

 

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?

でできます。