2013-08-19 52 views
0

我的respond_to块没有重定向回'/ dashboard'视图(url停留在'gcal_user.19'),并导致“406 Not Acceptable”错误在仪表板视图中的删除链接上。尝试调试,谷歌搜索,堆栈溢出,但一切努力没有成果。Respond_to没有重定向,给出406不可接受的错误

使用Rails 3.2.13,红宝石1.9.3
该应用程序包括的application.js

仪表板视图(Haml的)jQuery和jquery_ujs(不显眼的js):

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

GcalUser控制器:

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错误是由于请求的类型不匹配,我相信,我怎么查的请求和响应的类型产生的?如果存在不匹配的情况,代码中的哪个位置可以更改请求类型?

+0

其中路径u出现问题,link_to“删除Gcal用户”或user_root_path检查请求是否在点击“删除Gcal用户”链接后销毁操作? –

+0

请求按照预期进行销毁操作,我将问题缩小到'respond_to'块和'format.html {redirect_to user_root_path}'行 – HM1

+0

已经检查了user_root路由,不需要传递用户对象ID这条路线 –

回答

2

正如你在陈会毅的答复中提到,URL为“/ gcal_user。19“,这意味着控制器试图响应格式为'19'的格式,尝试重新定义路由为resources :gcal_user,如果您想删除不需要的路由,您可以通过only: :destroy,我会以回复作为注释,但

+0

这工作。谢谢你解释它。简单地用单数或复数的资源造成如此多的悲痛!我应该总是使用复数资源的路线吗? – HM1

+1

单数与复数之间的区别在[rails guide](http://guides.rubyonrails.org/routing.html#crud-verbs-and-actions)中有很好的解释。基本上,复数的期望是你将创建一种类型的多种资源,而单数只需要创建一种类型的资源。大多数情况下,你会使用复数形式,但单数形式在某些情况下也是有用的。 – jvperrin

+0

我不认为它在导游中解释得很好。我将解释解释为将当前登录用户的“/ profile /:id”路由掩盖为“/ profile”,但并不意味着应用中只有一个用户。然后,它给出了一个地理编码器的例子,但没有澄清它将只是一个地理编码器,就像你说的那样。感谢您澄清它,真的很感激它。 – HM1

2

“406”错误代表缺乏正确的格式回复。

你没有回应,因为你的控制器动作所产生的错误,错误没有格式正确的格式。

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

为什么失败?你没有一个id分配给obj。

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

查看您的路线。这是错误的

DELETE /gcal_user(.:format)    gcal_users#destroy 

没有ID。正确的事情应该是

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

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

+0

我相信路由就是这样,因为我使用'resource:gcal_user'而不是'resources:gcal_user'。我可能是错的,但我不认为这是问题,因为URL包含id,即“/gcal_user.19”,其中19是':id'。已验证'params [:id] = 19'。还要别的吗? – HM1

0

不用DELETE方法调用URL,因此不会调用destroy。所谓的是用户#用GET方法销毁,并且它给出了406错误。上面的Intrepidd给出了可能的原因及其解决方案。

尝试是这样的: -

devise_scope:用户做 根:到=> '回家#仪表盘' 结束

+0

我知道URL没有用DELETE方法调用...不显眼的js将它转换。我确认如上所述,调用'destroy'方法并执行其中的代码。 'respond_to'块出现问题。我没有看到Intrepidd的回答! – HM1

+0

请在这里转储您的config/routes.rb。 – techvineet

+0

我在问题中添加了上面的routes.rb文件,以便其他人可以看到它。 – HM1

相关问题