2010-12-05 13 views
0

Ich habe einen ControllerGET vs POST in Schienen

class PageController < ApplicationController 
    def home 

     print "Custom " + params 
    end 

end 

Wenn ich Anfrage über bin setzen GET es funktioniert (Druckwert von params), aber für POST es nicht Arbeit erhalte ich eine Fehler Action :: InvalidAuthenticityToken (Action :: InvalidAuthenticityToken):

Meine config/routes.rb ist

PostTest::Application.routes.draw do 
    root :to => "page#home" 
end 

Mein Ziel ist es, Schlüssel und Werte aus einem Beitrag Anfrage, Hilfe zu extrahieren?

+0

Ist das Schienen 3? – Cory

Antwort

2

Stellen Sie zunächst sicher, dass die protect_from_forgery Linie unkommentiert ist in controllers/application_controller.rb.

Stellen Sie dann sicher, dass Ihre POST-Anfrage das in der Zeile protect_from_forgery definierte Authentizitätstoken überträgt. Die Schienen form_tag Helfer erledigen das automatisch für Sie. Wenn Sie wollen form_tag nicht verwenden, können Sie die Echtheit Tag manuell wie folgt erzeugen:

tag(:input, :type => "hidden", 
    :name => request_forgery_protection_token.to_s, 
    :value => form_authenticity_token) 

Wenn dies nicht funktioniert, benutzen Sie bitte den Code für das Formular veröffentlichen, die die POST-Anforderung sendet.

+0

Ich habe #protect_from_forgery von application_controller kommentiert, dann funktioniert –

+0

. So fügen Sie der Anforderung ein Authentifizierungs-Token hinzu –

+0

Verwenden Sie zum Erstellen des Formulars einfach die Methode 'form_tag'. – bowsersenior

0

Wenn die Antwort auf meine obige Frage == ‚ja‘ - versuchen <% = csrf_meta_tag%> in der Seite und/oder das Layout zu werfen ...

+0

Ich benutze Schienen 3. Die Lösung <% = csrf_meta_tag%> funktioniert nicht –

+0

Ja - war ein wenig zu aggressiv von meiner Seite - das ist in erster Linie für unaufdringliche Javascript glaube ich. Sie sollten das Authentifizierungs-Token kostenlos erhalten, wenn Sie form_for in Ihrer Formularkonstruktion verwendet haben .... – Cory