Wenn Sie einen guten Anwendungsfall haben, würden wir es sicherlich für etwas leichter halten. Das Problem ist jedoch, dass es an diesem Punkt keine Assoziationen geben würde, da kein Modell involviert ist. Sie könnten nur die Query
API an diesem Punkt verwenden möchten:
Neo4j::Session.current.query.match(:n).where(n: {foo: 'bar'}).etc...
Die Dokumentation für alle Methoden ist hier:
http://neo4jrb.readthedocs.io/en/7.0.x/QueryClauseMethods.html
EDIT:
Bearbeiten der Post basierend auf Ihrem Kommentar, weil in einem Kommentar nicht genug Platz ist;)
Ihr Beispiel ist, dass Sie eine Product
haben und Sie möchten andere Modelle finden, die mit dem gleichen Beziehungstyp verknüpft sind. Hier ist, was ich tun könnte:
class Product
include Neo4j::ActiveNode
has_one :out, :file, type: :RELATED_FILE, model_class: %i(ProductImage ProductVideo ProductPDF)
# optionally
has_one :out, :image_file, type: :RELATED_FILE, model_class: :ProductImage
has_one :out, :video_file, type: :RELATED_FILE, model_class: :ProductVideo
has_one :out, :pdf_file, type: :RELATED_FILE, model_class: :ProductPDF
end
Diese auch has_many
und Arbeit genauso geändert werden könnte, wenn es die Möglichkeit, mehr als einen verbunden.
Dann sollten Sie in der Lage sein, einen select-Tag in der Ansicht zu erzeugen, die alle Optionen haben und welche die ID (s) nach unten an die Steuerung über params übergeben und dann könnte man einfach tun:
Product.create(name: 'or whatever props you have', file_id: params[:file_id])
Wenn die Zuordnung has_many
ist, können Sie stattdessen file_ids: params[:file_ids]
tun.
Das könnte dir auch damit zusammenhängende Modelle aus einer einzigen Klasse wie folgt erben betrachten:
class File
include Neo4j::ActiveNode
end
class ProductImage < File
# No need to `include Neo4j::ActiveNode`
end
Dann Sie das Array von Modellen tun könnte, wie ich oben vorgeschlagen, oder Sie können einfach tun:
class Product
include Neo4j::ActiveNode
has_one :out, :file, type: :RELATED_FILE
end
model_class: :File
wird basierend auf dem Namen der Assoziation angenommen. Wenn Sie has_many
hätten, dann wäre Ihr Verbindungsname :files
und es wird weiterhin model_class: :File
angenommen.
Seien Sie sich bewusst sein, dass, wenn Sie diese Knoten für Ihre zugehörigen Modelle tun (ProductImage
, ProductVideo
und ProductPDF
) würden alle auch wegen der Erbschaft der File
Label.
Als separater Modellvorschlag hätte ich wahrscheinlich nur ein Modell Image
(zum Beispiel) anstatt ProductImage
, damit das Modell möglicherweise wiederverwendet werden könnte.
Ich kann mir keinen allgemeinen Anwendungsfall vorstellen, bei dem die Suche nach allen Knoten von Vorteil wäre. Der größte allgemeine Anwendungsfall in dieser Zeile ist der gleiche Beziehungstyp zu verschiedenen Labels. Vielleicht gibt es einen besseren Weg, damit umzugehen? – joshfindit
Meinst du wie auf einem Verein? –
Hier ist ein Beispiel: Ich habe ein Produkt, das mit jeder Art von Datei verknüpft werden kann. Für die Rails-Integrität hat jede Dateigruppe ihre eigene Klasse: 'ProductImage',' ProductVideo', 'ProductPDF' und so weiter. Sie haben alle den gleichen Beziehungstyp: '[: RELATED_FILE]', und ich möchte, dass der Benutzer jeden Dateityp in einem einzigen Feld auswählen kann. In Cypher ist das einfach. In Neo4j; gibt es einen Weg? – joshfindit