2014-12-08 13 views
6

Ho due modelli:Come rimuovere la relazione in Neo4jRB 3.0?

class Topic 
    include Neo4j::ActiveNode 
    has_many :in, :favorited_by, model_class: User, origin: :favorite_topics 
end 

e

class User 
    include Neo4j::ActiveNode 
    has_many :out, :favorite_topics, model_class: Topic, type: 'favorited_by' 
end 

Come posso rimuovere unica associazione?

irb(main):008:0> Topic.first.favorited_by.delete(User.first) 
NoMethodError: undefined method `delete' for #<Neo4j::ActiveNode::Query::QueryProxy:0x00000004b27f10> 

Grazie.

risposta

7

Scusate per la mia prima risposta, ho pensato che fosse un'associazione has_many. Questo funziona, ma non è l'ideale:

topic = Topic.first 
user = User.first 
topic.favorited_by = topic.favorited_by.to_a - [user] 

EDIT:

topic.favorited_by(:user, :rel).match_to(user).delete_all(:rel) 

Questo è un po 'meglio, ma ancora non grande. Ho appena creato un problema di github per questo:

https://github.com/neo4jrb/neo4j/issues/630

+0

Inoltre, FYI verifica il problema. @subvertallchris ha messo insieme una soluzione in master –

2

Portare in dono il commento di Brian, si può fare Topic.first.favorited_by.first_rel_to(User.delete).destroy se si sta eseguendo l'ultima release, 4.0.0.rc.1, e sapere che hai solo una relazione tra i due.

Se si utilizza il ramo master di Github, ho solo aggiunto i metodi delete e destroy a QueryProxy. Topic.first.favorited_by.delete(User.first) verrà eseguito dal database, Topic.first.favorited_by.destroy(User.first) restituirà la relazione a Ruby e chiama delete, attivando i callback. Questi saranno saranno nella prossima versione, che dovrebbe essere presto.

Problemi correlati