Respond_to不重定向,给出406 Not Acceptable错误

时间:2013-08-19 05:06:09

标签: ruby-on-rails ruby

我的respond_to阻止不会重定向回'/ dashboard'视图(网址停留在'gcal_user.19'),当我点击该链接中的删除链接时会导致“406 Not Acceptable”错误仪表板视图。尝试调试,谷歌搜索,堆栈溢出,但所有努力都没有结果。

使用Rails 3.2.13,Ruby 1.9.3
该应用程序在application.js中包含jquery和jquery_ujs(不显眼的js)

仪表板视图(Haml):

%div.control-group.controls
  = link_to "Delete Gcal User", @gcal_user, method: :delete

GcalUser Controller:

  def destroy
    @gcal_user = current_user.gcal_user

    # -- commented out for debugging --
    # if @gcal_user.delete
    #   flash[:notice] = "#{@gcal_user.username} deleted"
    # end

    respond_to do |format|
      format.html { redirect_to user_root_path }
    end
  end

配置/ routes.rb中

  get "home/index"
  root :to => 'home#index' #, as: '/'
  devise_for :users
  resource :gcal_user
  match "dashboard" => 'home#dashboard', as: :user_root

路线:

DELETE /gcal_user(.:format)              gcal_users#destroy

单击“删除”链接可正确到达destroy方法。问题出现在respond_to块中。

其他代码示例似乎有这个工作......我无法弄清楚我错过了什么。有什么想法吗?

其次,406错误是由于请求类型不匹配,我相信,如何检查请求的类型和生成的响应?如果存在不匹配,代码中的哪个位置我可以更改请求类型?

3 个答案:

答案 0 :(得分:2)

“406”错误表示缺少正确的格式来回复。

您没有正确的格式来响应,因为您的控制器操作会导致错误,并且错误没有格式。

为什么错误?您delete方法失败。

为什么失败?您没有为obj分配ID。

为什么没有身份证?您尚未在路线中定义它。

查看您的路线。这是错的

DELETE /gcal_user(.:format)              gcal_users#destroy

没有身份证明。正确的事情应该是

DELETE /gcal_user/:id(.:format)              gcal_users#destroy

尝试检查并重新定义您的路线。

答案 1 :(得分:2)

正如你在Billy Chan的回答中提到的,网址是“/gcal_user.19”,这意味着控制器正在尝试响应类型为“19”的格式。尝试将路线重新定义为resources :gcal_user,如果您想删除不需要的路线,可以传递only: :destroy。我本来会回复评论,但我还没有这么做的声誉。

答案 2 :(得分:0)

不使用DELETE方法调用URL,因此不会调用destroy。所谓的用户#destroy使用GET方法,它给出406错误。可能的原因及其解决方案由Intrepidd给出。

尝试这样的事情: -

devise_scope:用户做 root:to => “家#仪表盘” 端