如何在Neo4jRB 3.0中删除关系?

时间:2014-12-08 09:57:03

标签: ruby-on-rails neo4j

我有两种模式:

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

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

我如何只删除关联?

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

谢谢。

2 个答案:

答案 0 :(得分:8)

对不起,我的第一个答案,我认为这是一个has_many协会。这有效,但它并不理想:

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

编辑:

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

这有点好,但仍然不是很好。我刚刚为此创建了一个github问题:

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

答案 1 :(得分:2)

对Brian的评论捎带,如果您运行的是最新版本4.0.0.rc.1,则可以Topic.first.favorited_by.first_rel_to(User.delete).destroy,并且知道两者之间只有一个关系。

如果您正在使用Github的主分支,我只是将deletedestroy方法添加到QueryProxy。 Topic.first.favorited_by.delete(User.first)将从数据库运行,Topic.first.favorited_by.destroy(User.first)将返回与Ruby的关系并调用delete,触发回调。这些将在下一个版本中出现,应该很快就会出现。