2016-04-21 15 views
0

Wenn die Schaltfläche "Speichern" angeklickt wird, werden zwei Einträge erstellt. Eine mit der: Karteninformationen gespeichert, und eine fehlt, beide mit dem gleichen: Name. Wie bekomme ich nur den kompletten Eintrag zum speichern?Dropzone auf Rails verursacht doppelte Formularübergabe an DB

new.html.erb

<%=form_for [@location, @floor], html: {class: "dropzone", multipart: true, id: "map-upload"} do |f|%> 
    <div> 
    <%=f.label :name%> 
    <%=f.text_field :name%> 
    </div> 

    <div class="fallback"> 
    <%=f.label :map%> 
    <%=f.file_field :map%> 
    </div> 

    <%=f.submit "Save", id: "floor-submit"%> 
<%end%> 

drag-drop.js

$(document).ready(function() { 
    // disable auto discover 
    Dropzone.autoDiscover = false; 

    var mapUpload = new Dropzone("#map-upload", { 
    paramName: "floor[map]", 
    autoProcessQueue: false, 
    maxFiles: 1, 
    addRemoveLinks: false, 
    dictDefaultMessage: 'Drag & drop a map image file here, or click here to select file to upload', 
    }); 

    $('#map-upload').submit(function(e){ 
    mapUpload.processQueue(); 
    }); 
}); 

relevanten Teils floor_controller:

def create 
    @floor = current_user.company.locations.find(params[:location_id]).floors.create(floor_params) 

    if @floor.save 
     flash[:notice] = "Floor has been created." 
     redirect_to location_floors_path 
    else 
     flash[:alert] = "There was an error saving the floor, please try again" 
     render 'new' 
    end 
    end 

Modell

class Floor < ActiveRecord::Base 
    belongs_to :location 

    has_attached_file :map 
    validates_attachment_content_type :map, :content_type => /\Aimage\/.*\Z/ 
end 

Antwort

0

Ich denke, dass Ihre js es einmal einreicht und Ihr Rails-Formular das zweite Mal einreicht. Ich würde empfehlen, einen von ihnen zu deaktivieren.

+0

Ich stimme zu. Wenn ich .preventDefault() auf dem Formular absende, kann ich nicht zurück zum Index umleiten. Wenn ich die .processQueue() abbringe, wird das Bild nicht hochgeladen. Darin liegt mein Dilemma. –

+0

Ich denke, wenn Sie Standard auf dem Formular verhindern, fügen Sie immer noch nur eine Umleitung zu Index Aktion von Ihrem js. z.B. location.href =/index nach der Prozesswarteschlange. –

+0

Es tut mir leid, ich meinte eine Umleitung zur Index-Methode meines Rails-Controllers. Es erfordert einen Param vom Benutzeraccount, so dass ich keine einfache Weiterleitung durch jQuery (oder nicht, dass ich gefunden habe) tun kann. –