我有两种模式:
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>
谢谢。
答案 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问题:
答案 1 :(得分:2)
对Brian的评论捎带,如果您运行的是最新版本4.0.0.rc.1,则可以Topic.first.favorited_by.first_rel_to(User.delete).destroy
,并且知道两者之间只有一个关系。
如果您正在使用Github的主分支,我只是将delete
和destroy
方法添加到QueryProxy。 Topic.first.favorited_by.delete(User.first)
将从数据库运行,Topic.first.favorited_by.destroy(User.first)
将返回与Ruby的关系并调用delete,触发回调。这些将在下一个版本中出现,应该很快就会出现。