考虑这个简单的设置:
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
s? (例如,某个密钥的Friendship
)。
在一封电子邮件中,Brian Underwood向我指出了这个片段:
ModelClass.association_name(:node_var, :rel_var).where("rel_var = 'some_condition'")
我试过玩它,但不明白。 ModelClass
是ActiveNode
还是ActiveRel
个实例?什么是:node_var
和:rel_var
?
答案 0 :(得分:2)
如果您想搜索具有特定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
表示目标朋友节点,r
表示关系,由:f, :r
参数给出。在此之后,to_a
会返回链接结束处的朋友,或者您可以使用pluck
或:f
来回复:r
以返回给定的对象。
model_class
选项始终描述关联另一侧的NODE类。在Brian的示例中,node_var
和rel_var
是Cypher将在其创建的语句中使用的标识符的通用名称。