响应块上的Rails 406错误

时间:2013-08-14 16:42:10

标签: ruby ajax ruby-on-rails-3

当我尝试实现ajax时,我收到“在13ms内无法接受406(ActiveRecord:0.6ms)”错误。代码在普通的html中工作,没有任何respond_to块。我把问题缩小到respond_to块,现在我很难过。 SO& S上的其他解决方案都没有谷歌相同的错误似乎适用或工作。

  1. 使用respond_to块时出现406错误的原因是html还是包含ajax / js?
  2. 如何解决406错误?
  3. 是否可以在redirect_to respond_to块中使用format.html,如下面的代码所示?
  4. 如果您需要更多信息,请与我们联系

    查看(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
    

2 个答案:

答案 0 :(得分:0)

你想用“json”回复,而不是用“js”回答(这意味着JavaScript)。 jquery_ujs,为method: :delete添加功能的gem,需要JSON。

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

答案 1 :(得分:0)

问题是由路线引起的。使用单数resource :gcal_user代替复数resources :gcal_users会导致URL格式不同。单数资源使用“/gcal_user.[id]”,这导致respond_to块认为格式必须在“。[id]”而不是“.js”或“.html”。

请参阅Respond_to does not redirect, gives 406 Not Acceptable error