Neo4jRB:搜索所有关联?

Neo4jRB: Searching through all associations?

考虑这个简单的设置:

class Person
  include Neo4j::ActiveNode

  property :name, type: String

  has_many :out, :follows, model_class: Person, rel_class: Friendship
  has_many :in, :followed_by, model_class: Person, rel_class: Friendship
end

class Friendship
  include Neo4j::ActiveRel

  property :key, type: String

  type 'friendship'
  from_class Person
  to_class Person
end

我如何在所有 Friendship 中搜索符合条件的人? (例如某个键的 Friendships)。

在一封电子邮件中,Brian Underwood 向我指出了这个片段:

ModelClass.association_name(:node_var, :rel_var).where("rel_var = 'some_condition'")

我试过玩弄它,但不明白。 ModelClassActiveNode 还是 ActiveRel 实例?什么是 :node_var:rel_var

如果您想搜索每个具有特定 key 属性 的友谊,您可以这样做:

Person.all.follows.rel_where(key: your_key_var)
# OR
Person.all.follows(:f, :r).where('r.key = {key}').params(key: your_key_var)

这些都会或多或少地生成 MATCH (p:Person)-[r:friends]->(f:Person),第一个示例使用自动定义的节点标识符,第二个示例使用 f 作为目标 Friend 节点,r :f, :r 参数给出的关系。之后,to_a 将 return 链末端的朋友,或者您可以用 :f:r 调用 pluck 到 return给定的对象。

model_class 选项总是描述关联另一端的节点 class。在 Brian 的示例中,node_varrel_var 是 Cypher 将在其创建的语句中使用的标识符的通用名称。