2017-03-17 6 views
0

Ich versuche, eine Indexseite mit einem Formular in einem Modal angezeigt zu erstellen. Nachdem das Formular mit POST Aktion als JS vorgelegt wird, löst #create Aktion, die #index auch als JS mit redirect_to Aktion reagiert, wie dieseActionController :: InvalidCrossOriginRequest bei Umleitung mit GET

def create 
    @output = Output.new(output_params) 

    respond_to do |format| 
    if @output.save 
     format.html { redirect_to @output, notice: 'Output was successfully created.' } 
     format.json { render :show, status: :created, location: @output } 
     format.js { redirect_to production_line_path @output.machine.production_line, machine_id: @output.machine_id, format: :js } 
    else 
     format.html { render :new } 
     format.json { render json: @output.errors, status: :unprocessable_entity } 
    end 
    end 
end 

Mein Problem ist, dass dieser

Sicherheit einen Fehler mit der folgenden Beschreibung gibt Warnung: Ein eingebetteter <script>-Tag auf einer anderen Site forderte geschütztes JavaScript. Wenn Sie wissen, was Sie tun, können Sie den Fälschungsschutz bei dieser Aktion deaktivieren, um JavaScript-übergreifendes JavaScript zu ermöglichen.

Completed 422 Unprocessable Entity in 35ms. (Views: 27.2ms | Active: 1,5 ms)

Action :: InvalidCrossOriginRequest (Warnung Sicherheit: ein eingebetteter <script>-Tag auf einer anderen Website Verlangte JavaScript geschützt Wenn Sie, was Sie wissen‘ tun, gehen Sie voran und deaktivieren Sie den Fälschungsschutz bei dieser Aktion, um eine JavaScript-Einbettung mit Ursprung zu ermöglichen.):

Ich bin mir nicht sicher, ob ich versuche, dies falsch zu machen. Müsste ich die Antwort ändern, damit JS nicht umleitet, sondern von derselben Controller-Aktion rendert #create?

+1

Warum werden Sie in 'format.js' umgeleitet, anstatt eine JS-Datei zu rendern? – emaillenin

+0

@emaillenin - Nicht sicher, wie ich schrieb Ich bin mir nicht sicher, ob dies der richtige Weg ist, dies zu tun. Zuerst dachte ich, dass ich eine Rendering-Aktion vom Controller des Modells, das ich anzeigen möchte, aufrufen lassen sollte. – adass

Antwort

1

Sie können entweder die eingebaute redirect_to verwenden und einen Pfad und Parameter übergeben, oder Sie können mit JS umleiten. Wenn Sie umleiten möchten dies tun:

render js: "window.location.pathname = #{production_line_path @output.machine.production_line, machine_id: @output.machine_id}" 
0

Ich glaube, ich entdeckte, was die Ursache für InvalidCrossOriginRequest Fehler war. Versehentlich wurde mein Formular als JS-Anfrage ohne Token versendet, die normalerweise automatisch vom UJS-Rails-Adapter hinzugefügt wird, aber wenn man es benutzt.

Mein Formular fehlte remote: true und stattdessen enthalten format: :js, die mich denken ließ, dass ich UJS Rails-Adapter verwendet und dass meine POST-Anforderungen mit erforderlichen Token für CSRF-Schutz waren. Mehr unter Cross-Site Request Forgery (CSRF)

Verwandte Themen