0

ajax を実装しようとすると、「406 Not Acceptable in 13ms (ActiveRecord: 0.6ms)」というエラーが発生します。respond_toコードは、ブロックなしで通常の html で機能します。問題をブロックに絞り込みましたが、respond_to今は困惑しています。同じエラーの SO と Google の他のソリューションはどれも適用または機能していないようです。

  1. respond_tohtml のみまたは ajax/js が含まれているかどうかにかかわらず、ブロックを使用すると 406 エラーが発生する原因は何ですか?
  2. 406エラーを修正するには?
  3. 以下のコードに示すように、ブロック内で使用redirect_toしても問題ありませんか?respond_toformat.html

さらに情報が必要な場合はお知らせください。

ビュー (haml):

通常のhtmlコード

%div.control-group.controls
  = button_to "Delete Gcal User", @gcal_user, method: :delete, class: "btn btn-danger"

AJAX コード

%div.control-group.controls
  = button_to "Delete Gcal User", @gcal_user, method: :delete, remote: true, class: "btn btn-danger"

AJAX 用の JS コード (coffeescript)

$('#calendar').empty();


コントローラ:

class GcalUsersController < ApplicationController
  def destroy
    @gcal_user = current_user.gcal_user
    # if @gcal_user.delete
    #   flash[:notice] = "#{@gcal_user.username} deleted"
    # end

    # redirect_to user_root_path  # <-- using this in html mode, app works i.e. no 406 error

    respond_to do |format|
      format.html { redirect_to(user_root_path) }  # <-- using this in html mode instead of above line, app fails i.e. 406 error
      # format.js  # <-- using this in ajax mode, app fails i.e. 406 error
    end
  end
end
4

2 に答える 2

0

「js」(ここでは JavaScript を意味します) ではなく、「json」で応答する必要があります。jquery_ujsの機能を追加する gem は、method: :deleteJSON を想定しています。

def destroy
  @gcal_user = current_user.gcal_user
  @gcal_user.delete

  respond_to do |format|
    format.html { redirect_to user_root_path }
    format.json { head :no_content }
  end
end
于 2013-08-14T21:56:31.113 に答える
0

問題はルートが原因でした。resource :gcal_user複数形の代わりに単数形を使用するresources :gcal_usersと、URL の形式が異なります。単一のリソースは「/gcal_user.[id]」を使用しているため、respond_toブロックは「.js」または「.html」ではなく「.[id]」の形式である必要があると判断しました。

Respond_to がリダイレクトされず、406 Not Acceptable エラーが発生するを参照してください

于 2013-08-24T16:32:32.350 に答える