2010-09-20 7 views
44

Mam następujący kod kontrolera:Rails 3 zwraca błąd 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 

i następujących trasach:

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

Teraz oprócz nieznacznie Whacky nazewnictwa - The przekierowania zawsze doprowadzić do 406 nie do przyjęcia. Co może być nie tak?

Odpowiedz

80

Usuń bloki respond_to do |format|. Ponieważ nie określasz formatu odpowiedzi, np. format.html { #your code here }. Sprawdź, czy dokumentacja z respond_to jest używana poprawnie.

+0

może ten związek mają info szukasz: http://techoctave.com/c7/posts/36-rails-3-0-rescue-from-routing-error-solution – nisevi

9

Miałem podobny błąd, mój kontroler reagował tylko na JSON. Musiałem go do odpowiedzi na HTML również testy do pracy (co ma sens tylko):

class AdsController < ApplicationController 
    respond_to :json, :html 

Otrzymałem błąd, gdy próbuje zrobić: assert_redirected_to ad_url (ad)

+2

Dzięki, właśnie to spowodowało błąd 406 dla mnie. – patrickandroid

+0

Naprawi to problem, jeśli użyjesz go w połączeniu z 'response_with @ obj'. W przeciwnym razie podanie 'response_to' w kontrolerze to noop. – maletor

+0

@maletor, not correct. Błędy 406 są generowane niezależnie od tego, czy użyto 'response_with'. –