Neo4jrb Запрос свойств отношений с QueryProxy и AssociationProxy
Мне интересно, можно ли указать свойство отношения во время цепочки ассоциаций. Следующий пример поможет вам понять:
class AccountRel
include ActiveGraph::Relationship
from_class :Person
to_class :Social
property :platform, type: [String] # Like [Instagram, Facebook]
end
class Person
include ActiveGraph::Node
self.mapped_label_name = 'Person'
property :name, type: String
property :gender, type: Boolean
has_many :out, :socials, rel_class: :AccountRel, unique: true
end
class Social
include ActiveGraph::Node
self.mapped_label_name = 'Social'
property :followers_count, type: Integer
has_many :out, :friends, rel_class: :AccountRel, unique: true
end
Моя цель - сделать что-то вроде этого:
Person.socials({query on platform property of relationship AccountRel})
OR
Person.socials.where(node_var: {Social node properies}, rel_var: {AccountRel properties})
Насколько мне известно,
Person.socials
вернуть AssociationProxy и с
Person.socials.where(followers_count: 100)
Я могу запросить социальные узлы, связанные с Человеком, с followers_count = 100, однако я не могу запросить отношения, которые связывают Person с Social. В терминах Сайфера я хотел бы сделать что-то вроде:
match (n:Person)-[r:AccountRel]->(s:Social)
where r.platform in ["Instagram", "Facebook"]
return n
Я хочу уточнить , что я заинтересован в цепочки с помощью QueryProxy и AssociationProxy, я не нужна строка запроса Cypher ( «MATCH (п: Person) ..»). Следующее может быть хорошим подходом
lang-ruby Person.socials(:s, :rel).where('rel.platform IN ["Instagram", "Facebook"]')
, но мой запрос должен быть максимально динамичным, поэтому я бы хотел избежать обоих:
- явное именование переменных, например: s и: rel в примере
- строковый запрос в предложении where