web-dev-qa-db-fra.com

Rails 3 renvoyant un HTTP 406 non acceptable?

J'ai le code de contrôleur suivant:

  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

et les itinéraires suivants:

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

Maintenant, mis à part la dénomination légèrement whacky - les redirections entraînent toujours un 406 Inacceptable. Quel pourrait être le problème?

44
Neil Middleton

Supprimer les blocs respond_to do |format|. Parce que vous ne spécifiez pas à quel format répondez-vous, par exemple. format.html { #your code here } . Consultez la documentation de respond_to comment l’utiliser correctement.

81
gertas

J'ai eu une erreur similaire, mon contrôleur répondait uniquement à JSON. Je devais aussi répondre au HTML pour que les tests fonctionnent (ce qui n’a de sens):

class AdsController < ApplicationController
  respond_to :json, :html

J'ai reçu l'erreur en essayant de faire: assert_redirected_to ad_url (ad)

10
ryanjones

J'ai commencé à avoir ce problème après un déploiement en production, même si tout fonctionnait bien en développement.

Après environ 15 minutes de temps perdu, j'ai finalement découvert que j'avais oublié de valider certains des fichiers de vue (comme index.html.erb) .

L'utilisation de tail -f log/production.log sur le serveur a révélé: FATAL -- : ActionController::UnknownFormat (SomeController#index is missing a template for this request format and variant.

En développement, l'erreur ne s'est pas produite car, de toute évidence, le fichier de vue était présent. 

0
sandre89