Neo4j gem - 使用has_many详细查询方向:两者

时间:2014-11-26 23:15:51

标签: ruby-on-rails neo4j relationship neo4j.rb

我能够通过此

从这个原始问题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_nodeto_node的方向

  from_class User
  to_class   Event
  type 'invited'

之前设置为从EventUser。我的一个问题是,为什么我必须更改它以使查询工作? has_many: both是不是意味着这个方向无关紧要?

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

我认为我需要使current_user方法正常工作,因为我只想要current_user的朋友的事件。建议?

1 个答案:

答案 0 :(得分: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)

我仍然希望回答上面的一些问题!