【问题标题】:Rails 3 returning a HTTP 406 Not Acceptable?Rails 3 返回 HTTP 406 Not Acceptable?
【发布时间】:2010-09-20 11:33:27
【问题描述】:

我有以下控制器代码:

  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 不可接受。有什么问题?

【问题讨论】:

    标签: ruby-on-rails routing


    【解决方案1】:

    删除respond_to do |format| 块。因为您没有指定要响应的格式,例如format.html { #your code here } 。 查看respond_to的文档如何正确使用它。

    【讨论】:

    【解决方案2】:

    我在生产中部署后开始遇到此问题,即使在开发中一切正常。

    在浪费了大约 15 分钟之后,我终于发现我忘记提交一些视图文件(如 index.html.erb)

    在服务器上使用tail -f log/production.log显示:FATAL -- : ActionController::UnknownFormat (SomeController#index is missing a template for this request format and variant.

    在开发过程中,该错误没有发生,因为显然存在视图文件。

    【讨论】:

      【解决方案3】:

      我遇到了类似的错误,我的控制器只响应 JSON。我还需要它来响应 HTML 以使测试正常工作(这才有意义):

      class AdsController < ApplicationController
        respond_to :json, :html
      

      尝试执行时收到错误:assert_redirected_to ad_url(ad)

      【讨论】:

      • 只有与respond_with @obj 结合使用才能解决问题。否则,在控制器中指定respond_to 是noop。
      • @maletor,不正确。不管respond_with是否使用都会产生406错误。
      猜你喜欢
      • 2016-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-13
      • 1970-01-01
      • 2019-12-15
      • 1970-01-01
      • 2011-08-16
      相关资源
      最近更新 更多