2014-11-16 10 views
8

Also mache ich diese App, wo ich Menüpunkte für ein Restaurant haben werde, oder?Mehrere Datensätze gleichzeitig mit SailsJS aktualisieren

sollte der Besitzer die Möglichkeit, enthält mein menuitem.js Modell

Dies ist

um die Menüpunkte zu bewegen

Name, Preis, Lage

Das ist es. Super einfach.

Also diese Elemente neu zu positionieren ich jQuery UI verwenden So wird das Endprodukt dieses etwas sehr ähnlich sein>http://jqueryui.com/sortable/

Also mein Ziel ist es, die Position jedes dieser Menüpunkte auf der Datenbank zu speichern jeder Zeit einer der Menüpunkte wurde geändert. Also dachte ich, Segel muss eine Funktion haben, die auf alle Datensätze einmal

Wie unten

Menuitem.update([{id: 1},{position: 3}], [{id: 2},{position: 3}]).exec(function(err, updatedRecords) { 
      if (err) { 
       return res.send({message: 'Could not update the records', err: err}, 500); 
      } 

      if (updatedRecords) { 
       return res.send({ records: updatedRecords }, 200); 
      } else { 
       return res.notFound('Records not found'); 
      } 
     }); 

Jede Hilfe sehr geschätzt

auch ein Problem aktualisieren können geöffnet auf SailsJS wäre https://github.com/balderdashy/sails/issues/2404

+0

Mit Mongoose anstelle von Waterline, ich weiß, dass ich diese Fähigkeit habe, aber ich benutze nicht Waterline, sollten Sie das Dokument überprüfen. Waterline ist das "ORM" der Segel. – Vadorequest

+0

Nicht hilfreich Kumpel. Sorry –

+0

Btw, Fragen zu Segeln werden normalerweise unter https://groups.google.com/forum/#!forum/sailsjs anstelle von github geschrieben, was mehr für Probleme, Bugs und so ist. Ich denke nur, dass Sie eine schnellere Antwort auf GoogleGroups bekommen können als Github, nur zu sagen. – Vadorequest

Antwort

0

Sie können dies mithilfe einer nativen SQL-Abfrage erreichen. Um native SQL-Abfragen auszuführen, müssen Sie die Funktion Model.query() von waterline verwenden. In Ihrem Fall wird es so sein.

var myQuery = "update menuitem set .... complete SQL query goes here "; 

Menuitem.query(myQuery, function (err, result){ 
    if(err){ 
    // error handling here 
    } 
    else{ 
    // do something with result here 
    } 
}); 

Jetzt können Sie für Ihre native SQL-Abfrage die case-Anweisung verwenden, um die Zeilen abhängig vom Positionswert zu aktualisieren. Zum Beispiel, wenn ich Artikel von Position 4 zu Position 2 verschiebe, dann wird meine Abfrage so sein.

update menuitem 
set position = case when position = 4 then 2 
       when position >=2 then position + 1 
       else position end; 

Ofcourse, 4 und 2 werden dynamisch bereitgestellt werden und Ihre Abfrage möglicherweise komplexe aussehen, da Sie auch behandeln müssen werden, ob der Benutzer ein Objekt nach oben oder unten bewegt. Aber so können Sie das erreichen. Wenn Sie noch kompliziertere Logik ausführen müssen, können Sie auch eine gespeicherte Prozedur erstellen. Dies wird auch mit Model.query ausgeführt. Achten Sie beim Erstellen dynamischer Abfragen mit den vom Endbenutzer bereitgestellten Parametern auf SQL Injection-Angriffe.