简体   繁体   English

Rails 3返回HTTP 406不可接受?

[英]Rails 3 returning a HTTP 406 Not Acceptable?

I have the following controller code: 我有以下控制器代码:

  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

and the following routes: 以及以下路线:

           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"}

Now, aside from the slightly whacky naming - the redirects always result in a 406 Not acceptable. 现在,除了稍微笨拙的命名之外 - 重定向总是导致406不可接受。 What could be wrong? 可能有什么不对?

Remove respond_to do |format| 删除respond_to do |format| blocks. 块。 Because you are not specifying to what format are you responding, eg format.html { #your code here } . 因为您没有指定要响应的格式,例如format.html { #your code here } Check documentation of respond_to how to use it properly. 检查respond_to如何正确使用它的文档。

I had a similar error, my controller was only responding to JSON. 我有一个类似的错误,我的控制器只响应JSON。 I needed it to respond to HTML also for the tests to work (which only makes sense): 我还需要它来响应HTML以使测试工作(这才有意义):

class AdsController < ApplicationController
  respond_to :json, :html

I received the error when trying to do: assert_redirected_to ad_url(ad) 我在尝试时收到错误:assert_redirected_to ad_url(ad)

I started having this issue after a deploy in production, even tough everything was working fine in development. 在生产中部署之后,我开始遇到这个问题,甚至一切都在开发中运行良好。

After some 15 minutes of wasted time, I finally found out that I had forgotten to commit some of the view files (like index.html.erb) . 经过大约15分钟的浪费时间后,我终于发现我忘了提交一些视图文件(比如index.html.erb)

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

In development the error didn't happen because, obviously, the view file was present. 在开发过程中,错误没有发生,因为显然,视图文件存在。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM