リクエストのフォーマットとジャバスクリプトのcallback

ajaxでもcreateアクション使いたいと思ってaction内で分岐してる。その分岐に hxr? ではなくてrespond_toメソッドに変更したら盛大にハマった。

def create
  if request.xhr?
    # json返す
  else
    # html返す
 end
end

  def create
    respond_to do |format|
      format.json {
        # json返す
      }
      format.html {
        # html返す
      }
    end
  end

xhr?からrespond_toにしたら、ajaxのコールバックが発火しなくなって何もしていないのに壊れた!と思ったらレスポンスのContentTypeとリクエストのフォーマットが不一致だったので発火しなかったみたい。