Rails 3 Automatische Vervollständigung über mehrere Modelle hinweg

8

So fand ich einige gute Informationen über Autocomplete für Rails 3, es sieht wirklich einfach zu bedienen aus. Aber ich habe einen Anwendungsfall, der nicht passt und ich brauche einen Rat.

Ich möchte dem Benutzer die Möglichkeit geben, Produkte und Dienstleistungen über ein einfaches Formular einer Rechnung hinzuzufügen. Ich möchte, dass sie in das Feld "Item" (Artikel) eingeben können und die Vervollständigung sowohl von "Product.name" als auch von "Service.name" als einzelnen Satz durchführen können.

Ich denke daran, zu versuchen, ein Elternmodell zu schreiben, das alle drei überlagert, aber ich denke immer noch nicht, dass das mein Problem löst, da ich eine Funktion in der Autocomplete-Definition nicht aus meiner Sicht verwenden kann.

>

Irgendwelche Ratschläge, wie ich das versuchen könnte? Selbst mit den einfachen Suchbeispielen, die da draußen sind, scheinen sie auf ein einzelnes Modell beschränkt zu sein.

    
R. Yanchuleff 05.03.2011, 21:39
quelle

2 Antworten

4

Wenn Sie nicht dagegen sind, Redis in den Mix aufzunehmen, schauen Sie sich Ссылка an - aus der README:

Soulmate ist ein Werkzeug, um das allgemeine Problem der Entwicklung einer schnellen automatischen Vervollständigung zu lösen. Er verwendet die sortierten Sätze von Redis, um einen Index von teilweise vervollständigten Wörtern und den entsprechenden übereinstimmenden Elementen zu erstellen, und bietet eine einfache Sinatra-Anwendung, um sie abzufragen. Soulmate beendet deine Sätze.

Soulmate wurde entworfen, um einfach und schnell zu sein, und bietet folgendes an:

  • Geben Sie Vorschläge für mehrere Arten von Elementen in einer einzigen Abfrage ein (bei SeatGeek vervollstndigen wir Autoren, Veranstaltungen und Veranstaltungsorte automatisch)
  • Die Ergebnisse werden nach einer benutzerdefinierten Punktzahl geordnet
  • Beliebige Metadaten für jeden Gegenstand (bei SeatGeek speichern wir sowohl eine URL als auch einen Untertitel)

Ein Element ist ein einfaches JSON-Objekt, das wie folgt aussieht:

%Vor%

Dabei ist id ein eindeutiger Bezeichner (innerhalb des spezifischen Typs), term ist der Ausdruck, für den Sie Komplettierungen bereitstellen möchten, score ist ein benutzerspezifizierter Ranking-Messwert (redis sortiert lexikographisch Dinge für Objekte mit die gleiche Punktzahl), und data ist ein optionaler Container für Metadaten, die du zurückgeben möchtest, wenn dieser Gegenstand übereinstimmt (bei SeatGeek enthalten wir eine URL für den Gegenstand sowie einen Untertitel für die Darstellung in einem Autocomplete Dropdown).

Siehe Soulmate in Aktion bei SeatGeek .

Wenn nichts anderes, vielleicht gibt es Ihnen einige Ideen, wie Sie die Daten auf eine sinnvolle Weise strukturieren können.

Ich habe nicht geschrieben oder habe etwas mit Seelenverwandten zu tun. Es ist nur eine Bibliothek, die ich entdeckt habe, als ich versuchte, ein ähnliches Problem zu lösen. Hoffe es hilft!

    
Josh Deeden 06.03.2011, 01:04
quelle
1

Wenn clientseitige Autovervollständigung eine Option ist (z. B. wenn Sie nur wenige Produkte und Dienste haben), könnten Sie mit JQuery-Autocomplete fortfahren:

Controller:

%Vor%

anzeigen:

%Vor%     
Markus Proske 12.04.2011 11:54
quelle