2015-12-14 2 views
1

J'utilise neo4j avec neo4jrb. Dans irb J'utilise cette requête:Neo4j et Rails ne me donnent pas de modèle

p = Tag.as(:t).where("t.value = 'Andre'").names(:n).pluck(:n) 

Je me attends à obtenir avec p.first un modèle de type Person. Mais comme résultat, je reçois seulement un CypherNode 3 (53012760). Le 3 est l'identifiant du modèle personnel. Mais je ne peux pas obtenir le modèle, qu'est-ce que je fais mal?

Voici mes modèles et relations:

class Tag 
    include Neo4j::ActiveNode 
    property :value, index: :exact, constraint: :unique 
    ... more outs .... 
    has_many :out, :names, rel_class: Names 
end 

class Names 
    include Neo4j::ActiveRel 

    from_class Tag 
    to_class Person 

    type 'name' 
end 

class Person 
    include Neo4j::ActiveNode 

    has_many :in, :named, rel_class: Names 
end 

Répondre

1

Lorsque je tente localement (neo4j version 6.0.1 gemme), il fonctionne, bien que certains changements afin qu'il ne manquerait pas quand je collais dans RIR. Plus précisément, je passais des symboles plutôt que des classes à rel_class, from_class et to_class afin qu'il n'y ait pas de charger des questions d'ordre:

class Tag 
    include Neo4j::ActiveNode 
    property :value, index: :exact, constraint: :unique 

    has_many :out, :names, rel_class: :Names 
end 

class Names 
    include Neo4j::ActiveRel 

    from_class :Tag 
    to_class :Person 

    type 'name' 
end 

class Person 
    include Neo4j::ActiveNode 

    has_many :in, :named, rel_class: :Names 
end 

Si cela ne fonctionne pas, vous pouvez essayer de supprimer tout autre code de vos modèles pour voir s'il y a autre chose qui cause le problème.

De même, vos modèles sont-ils tous sous app/models et nommés correctement?

+0

Cela fonctionne. Très agréable. Pourriez-vous expliquer quelle est la différence ou pourquoi ma version n'a pas fonctionné comme prévu? – Andre

+1

Je ne suis pas sûr à 100%, mais si, par exemple, votre modèle 'Tag' essaie de charger d'abord, il essayera d'accéder à la constante' Names'. Si ce n'est pas encore défini, il se peut qu'il y ait une erreur que vous n'avez pas remarquée. Si vous utilisez Rails, la fonctionnalité AutoLoad d'ActiveSupport doit prendre soin de cela, mais vous pouvez toujours rencontrer des problèmes avec des références circulaires. Je n'ai pas enquêté de très près –