我的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错误是由于请求类型不匹配,我相信,如何检查请求的类型和生成的响应?如果存在不匹配,代码中的哪个位置我可以更改请求类型?
答案 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 => “家#仪表盘” 端