2

我能够从这个原始问题Neo4j gem中进行特定的模式匹配- Preferred method to deal with admin relationship via this

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_nodeand的方向to_node

  from_class User
  to_class   Event
  type 'invited'

它以前设置为 fromEventUser。我的一个问题是,为什么我必须改变它才能使查询工作?方向不重要has_many: both吗?

另一个变化是将我的关系类型更改为小写。在我的模型中,它是用所有小写字母写的,这似乎很重要。我认为两者都会像neo4j那样转换为全大写,但就目前而言,它没有。

我确实认为我需要让 current_user 方法工作,因为我只想要 current_user 朋友的事件。建议?

4

1 回答 1

2

好的,我混合了两种不同风格的查询

例如在文档中,当您已经链接到lesson

s.lessons(:l, :r).where("r.start_date < {the_date} and r.end_date >= {the_date}").params(the_date: '2014-11-22').pluck(:l)

像这样的东西

Student.query_as(:s).where("s.age < {age} AND s.name = {name} AND s.home_town = {home_town}").params(age: params[:age], name: params[:name], home_town: params[:home_town]).pluck(:s)

注意你放置东西的位置.以及query_aslessons(:l, :r)部分的对比

我的最终查询消除了任何match组件,因为我已经在我正在查询的关系和节点处。所以它看起来像这样。

current_user.friends.events(:event, :rel).where("rel.admin = {admin_p} AND event.detail = {detail_p}").params(admin_p: true, detail_p: true).pluck(:event)

不过,我仍然想回答我上面的一些问题!

于 2014-11-27T03:38:00.537 回答