【发布时间】:2014-11-26 23:15:50
【问题描述】:
我能够通过这个原始问题Neo4j gem - Preferred method to deal with admin relationship 进行特定的模式匹配
Event.query_as(:event).match("(event)<-[invite:invited]-(user1:User)<-[friends_with:friends_with]-(user2:User)").where('invite.admin = true').pluck(:event)
我无法获得这样的修改版本来工作
current_user.friends.events.query_as(:event).match("(event)<-[invite:invited]-(user:User)").where(invite: {admin: true}).pluck(:event)
所以我真正改变的是我在邀请课程中改变了from_node 和to_node 的方向
from_class User
to_class Event
type 'invited'
之前设置为从Event 到User。我的一个问题是,为什么我必须改变它才能使查询工作? has_many: both 不是意味着方向无关紧要吗?
另一个变化是将我的关系类型更改为小写。在我的模型中,它是用所有小写字母写的,这似乎很重要。我认为两者都会像neo4j那样转换为全大写,但就目前而言,它没有。
我确实认为我需要让 current_user 方法工作,因为我只想要 current_user 朋友的事件。有什么建议吗?
【问题讨论】:
-
has_many :both在使用 QueryProxy 时创建了一个无方向的匹配,但每个关系仍然有一个方向。如果您使用:both关联创建 rel,例如user1.friends << user2,它将创建从 user1 到 user2 的 rel。 -
所以只有 queryproxy 没有方向性,但不是这样的?
-
如果您正在编写自己的密码查询,则需要知道关系的方向,否则您将省略箭头以表示双向匹配。
current_user.friends.events.query_as(:event).match("(event)-[invite:invited]-(user:User)").where(invite: {admin: true}).pluck(:event)
标签: ruby-on-rails neo4j relationship neo4j.rb