406 jQuery上不可接受的错误:remote =>真实的链接

时间:2011-02-07 03:32:39

标签: jquery ruby-on-rails-3 http-status-codes http-status-code-406

我通过锚标记链接提交删除请求,并使用:remote =>如果通过JS提交它以使用jQuery,则为true。我已经在另外两个与此相同的实例中完成了此操作,完全没有问题。但由于某种原因,这个问题导致了问题 - 每当我提交时,我都会收到406 Not Acceptable错误。

销毁链接

content_tag( :p, link_to("+#{vote.weight}", unvote_path(vote), :method => :delete, :remote => true ), :class => "chosen" )

的routes.rb

delete "/unvote" => "votes#destroy", :as => :unvote

votes_controller.rb

def destroy
    @vote = Vote.find(params[:format])
    if !current_user.owns(@vote)
      flash[:alert] = "You cannot remove votes that aren't yours!"
    end
    @idea = @vote.idea
    @vote.destroy

    respond_with @vote do |format|
      format.js
      format.html { redirect_to category_idea_path(@idea.category, @idea) }
    end
end

destroy.js.erb

$('#vote_buttons').append('<%= escape_javascript get_vote_buttons(@idea.category, current_user, @idea) %>');

这与我在 new.js.erb 中完全相同,并且工作正常(除了它没有完全返回我想要的事实,但它至少执行并正确附加。)

的application.js

jQuery.ajaxSetup({
    'beforeSend': function(xhr) { 
        xhr.setRequestHeader("Accept", "text/javascript");
    },
    cache: false
 });

我已经在 application.js 中得到了这个,如果我理解的话,应该正确设置标题。

此外,请注意该链接正确执行其删除功能 - 当我手动刷新页面时,投票已被删除。唯一的问题似乎是 destroy.js.erb

返回的内容

知道为什么这与我的其他工作示例的行为不同?我一整天都在反对这一点,无法弄明白。

1 个答案:

答案 0 :(得分:0)

您不必添加:method =&gt; :删除你的销毁链接?您也可能不想使用new_category_idea_vote_path来生成销毁链接,而只是使用category_idea_vote_path

就像那样:

content_tag( :p, link_to("+#{i}", category_idea_vote_path(category, idea, :weight => i), :remote => true, :method => :delete ), :class => "valid" )

见这个例子:

  link_to("Destroy", "http://www.example.com", :method => :delete, :confirm => "Are you sure?")

on http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to