2016-06-14 10 views
0

Ich muss den Inhalt eines Formulars greifen, bevor die Absendetaste gedrückt wird, um die Benutzereingabe zu speichern. Wenn das Formular gesendet wird und die Validierung fehlschlägt, gehen die Benutzereingaben verloren.Versuch, Inhalt einer Variablen den Parametern zuzuweisen [:

Ich habe den Hauptinhalt des Formulars ok mit Sitzungsvariablen arbeiten. Allerdings möchte ich die params nehmen [: Bilder] aus Büroklammer und dass in einer Tabelle mit einer Spalte speichern und dann in params laden zurück [: Bilder]

Meine Form hat

<div class="field" title="You may attach one or more documents to this observation: Pictures, word documents, spreadsheets, etc"> 
    <%= f.label :Upload_attachments %><br> 
    <%= file_field_tag "images[]", type: :file, multiple: true %> 
</div> 

im respond_to für erstellen, kann ich den Inhalt von params schreiben [: Bilder] auf eine Tabelle mit

if params[:images] 
     temp_data = TempDatum.create(item: '2', data: params[:images]) 
    end 

, das funktioniert und die Ergebnisse in etwa wie folgt in Daten

[#, @ ursprünglicher_Dateiname = "2016 06 13 capture.JPG", @ content_type = "image/jpeg", @ headers = "Inhalt-Disposition: Formulardaten; Name = \ "Bilder [] \"; filename = \ "2016 06 13 capture.JPG \" \ r \ nContent-Typ: image/jpeg \ r \ n ">]

in meinem zu schaffen, ich habe folgende

@image_data = TempDatum.last 
    if @image_data.present? 
     # params[:images] = @image_data.data 
     params[:images] = '[#<ActionDispatch::Http::UploadedFile:0xe4a46e8 @tempfile=#<Tempfile:C:/Users/cmendla/AppData/Local/Temp/RackMultipart20160614-13124-iib9h0.JPG>, @original_filename="2016 06 13 capture.JPG", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"images[]\"; filename=\"2016 06 13 capture.JPG\"\r\nContent-Type: image/jpeg\r\n">]' 
     $temp1 = 'got here' 
    end 

Ich habe verschiedene Möglichkeiten ausprobiert, um den Inhalt von TempDatum.data in die params zu bekommen [: images] So wie es jetzt ist, habe ich einfach versucht, die rohen Daten aus dem Datenfeld in der Tabelle zu nehmen

Was muss ich tun, um params [: images] auf die Werte in TempDatum.data für einen bestimmten Datensatz zu setzen:

Antwort

1

Was Sie versuchen zu tun, wird nicht funktionieren und ist grob überentwickelt. Das Objekt params ist ein ActionController::Parameters, daher wird es nie außerhalb des Kontexts des Controllers zugänglich sein, der es erstellt hat (in der Ansicht kann nicht darauf zugegriffen werden).

Hier ist, was Sie tun müssen:

Erstens, stellen Sie sicher, dass Sie das Objekt instanziieren Sie in der new Aktion zu erstellen versuchen, und stellen Sie sicher, dass Sie Karte Formular auf das Objekt.

Zweitens müssen Sie das Objekt erneut zu Beginn Ihrer create Aktion instanziieren. Sie sollten dann eine Bedingung für die save Aktion dieses Objekts haben. Wenn die save aufgrund der Validierung fehlschlägt, render :new und das Formular wird die eingegebenen Daten enthalten.

def new 
    # map this to your form_for 
    @object = Model.new 
end 

def create 
    @object = Model.new(params) 
    # other logic... 
    if @object.save 
     # do what you need to do if everything is valid... 
    else 
     render :new 
    end 
end