2011-01-09 2 views
1

Ich verwende Schienen für mein Back-End zu einer Flash-App. Ich muss einen Haufen Params per Post an die Gleise schicken. Ich habe eine Schiene Aktion in meinem users_controller registrieren genanntAngeben von POST in Schienen 3 Routen und Aufruf von Flash

meine Routen-Datei so etwas wie diese

var vars:URLVariables = new URLVariables(); 
vars.first_name = "First"; 
vars.last_name = "Last"; 
vars.address = "555 Mysteet Rd."; 
vars.email = "[email protected]"; 
vars.city = "The Hill"; 
vars.provice = "KY"; 
vars.postal_code = "55555"; 

var request : URLRequest = new URLRequest("/register"); 
request.method = URLRequestMethod.POST; 
request.data = vars; 

var loader : URLLoader = new URLLoader(); 
loader.dataFormat = URLLoaderDataFormat.TEXT; 
loader.addEventListener(Event.COMPLETE, registerHandler); 
loader.addEventListener(IOErrorEvent.IO_ERROR, onIOError); 
loader.load(request); 

Der Fehler, den ich in Flash bin immer

resources :users 

    match 'register' => 'Users#register', :via => :post 

die Action sieht aussieht, ist ein IO_ERROR Streaming Event bla bla bla witch zeigt normalerweise an, dass die von Ihnen angerufene URL nicht existiert. Wenn ich die request.method in GET ändere, funktioniert der Aufruf, aber nicht alle Daten werden an Rails gesendet, da GET die Länge der gesendeten Daten nicht verarbeiten kann.

+0

Zum Debuggen, um genau zu sehen, was aus dem Flash, und die Antwort gebucht wird, die zurückgeschickt wird (auch, wenn es ein Fehler Seite, möglicherweise mit Debug-Info), ich empfehle http://www.charlesproxy.com –

Antwort

4

Wie sehen Controller und Action aus?

Für API-Aufrufe, z. B. von Flash/Flash zu Rails, verwende ich keine benutzerdefinierten Routings. Ich verlasse mich eher auf RESTful-Aktionen. Also ich rufe:

/users/create/

Da Sie Ihre Ressource für deklarieren: Benutzer in Ihren Routen, sollten Sie diesen Routing an den richtigen Stelle (vorausgesetzt, Sie haben eine RESTful Aktion erstellen).

Gib mir Details und ich werde versuchen, mehr zu helfen.

[Bearbeiten]

Weitere Details von Matt über IM:

  • Controller-Benutzer und Aktion Register ist
  • POST erfolgreich in Rails erhalten, aber führt den Fehler

    ActionController :: InvalidAuthenticityToken

Für die Sicherheit fügt Rails 3 ein verstecktes Formularfeld mit einem Token hinzu, das bei jedem POST für einen Rails-Controller erwartet wird. Da dieser POST aus Flash stammt, fehlt dieses Token offensichtlich und wir erhalten diesen Fehler.

Um das Problem zu beheben, mit der Echtheitsprüfung für den Controller deaktivieren:

skip_before_filter :verify_authenticity_token 
+0

total den Trick und danke nochmal für das Hopping auf IM mit mir Kumpel. – mattwallace

+0

Zunächst einmal müssen Sie einige tun ** vor Filter ** Arbeit: 'skip_before_filter: verify_authenticity_token,: Nur => [: your_action] before_filter: semi_verify_authenticity_token,: Nur => [: your_action]' Dann brauchen Sie eine Funktion, um zu definieren, wann nach der Token-Authentizität gesucht werden soll: 'def semi_verify_authenticity_token verify_authenticity_token außer request.xhr? # Oder was auch immer andere Kriterien Sie verwenden würden Ende' Info zitiert von [hier] (http: //www.patricktulskie.com/2010/04/skip-rails-authenticytoken-check-manchmal /) – dgm