2010-09-20 83 views
44

我有以下的控制器代码:Rails 3返回HTTP 406不可接受?

def create 
    @admin = Admin.new(params[:admin]) 
    respond_to do |format| 
     if @admin.save 
     redirect_to(@admin, :notice => 'Admin was successfully created.') 
     else 
     render :action => "new" 
     end 
    end 
    end 

    def update 
    @admin = Admin.find(params[:id]) 
    respond_to do |format| 
     if @admin.update_attributes(params[:admin]) 
     redirect_to(admin_admins_path, :notice => 'Admin was successfully updated.') 
     else 
     render :action => "edit" 
     end 
    end 
    end 

及以下线路:

  admin_admins GET /admin/admins(.:format)   {:action=>"index", :controller=>"admin/admins"} 
      admin_admins POST /admin/admins(.:format)   {:action=>"create", :controller=>"admin/admins"} 
     new_admin_admin GET /admin/admins/new(.:format)  {:action=>"new", :controller=>"admin/admins"} 
     edit_admin_admin GET /admin/admins/:id/edit(.:format) {:action=>"edit", :controller=>"admin/admins"} 
      admin_admin GET /admin/admins/:id(.:format)  {:action=>"show", :controller=>"admin/admins"} 
      admin_admin PUT /admin/admins/:id(.:format)  {:action=>"update", :controller=>"admin/admins"} 
      admin_admin DELETE /admin/admins/:id(.:format)  {:action=>"destroy", :controller=>"admin/admins"} 

现在,除了略显怪诞的命名 - 重定向总是导致406无法接受的。什么可能是错的?

回答

80

删除respond_to do |format|块。由于您未指定回应的格式,例如format.html { #your code here }。 检查文档respond_to如何正确使用它。

+0

也许这个环节有信息你正在寻找:http://techoctave.com/c7/posts/36-rails-3-0-rescue-from-routing-error-solution – nisevi 2015-07-23 04:41:09

9

我有一个类似的错误,我的控制器只响应JSON。我需要它来回复也为HTML的测试工作(这仅是有道理的):

class AdsController < ApplicationController 
    respond_to :json, :html 

我在试图做的时候错误:assert_redirected_to AD_URL(广告)

+2

谢谢,这是什么导致了我的406错误。 – patrickandroid 2013-04-13 00:11:51

+0

这只会解决问题,如果您与'respond_with @ obj'结合使用。否则,在控制器中指定'respond_to'是noop。 – maletor 2013-06-20 07:47:11

+0

@maletor,不正确。无论是否使用“respond_with”,都会生成406个错误。 – 2014-12-29 18:44:24