Neo4jrb Проблема наследования и области видимости при вызове отношений

Я использую Neo4jrb с Rails, и я пытаюсь максимально использовать методы цепочки QueryProxy для построения сложных запросов, но я застрял при рассмотрении узлов с несколькими метками из-за наследования. Следующий необработанный пример может дать вам представление:

      class Person
  include ActiveGraph::Node
  property :name, type: String
  property :gender, type: String

  has_many :out, :socials, type: :HAS_ACCOUNT, model_class: 'Social', unique: true
end

class Social
  include ActiveGraph::Node
  # nothing relevant
end

class Facebook < Social
  # Inheriting from Social, the labels for Facebook nodes are [:Social, :Facebook]

  property :name, type: String
  # other properties
  
  has_many :out, :friends, type: :FRIENDS_WITH, model_class: 'Facebook', unique: true
end

class Instagram < Social
    # Inheriting from Social, the labels for Instagram nodes are [:Social, :Instagram]

  # some property and relationship
end

Простой рабочий запрос - получить / запросить имя учетной записи Facebook Человека:

      Person.as(:p).socials.where(name: "Someone")

Которые возвращают следующий зашифрованный запрос:

      Person#socials 
  MATCH (n:`Person`)
  MATCH (n)-[rel1:`HAS_ACCOUNT`]->(result_socials3:`Social`)
  WHERE (result_socials3.name = $result_socials3_name)
  RETURN result_socials3 | {:result_socials3_name=>"Someone"}

Таким образом, при запросе свойств производного класса (Facebook) класса model_class, указанного в отношении Person, ошибок не возникает.

Однако, когда я пытаюсь запросить отношения, определенные в Facebook, activegraph не находит их и возвращает следующую ошибку:

      Person.as(:p).socials.friends
# OR
Person.as(:n).socials.branch { friends } 

# ERROR
`method_missing': undefined method `friends' for #<AssociationProxy Person#socials []> (NoMethodError)

Вопросов:

  • Почему я могу запросить свойства производного класса, указанного в model_class в отношениях Person, но я не могу запросить его отношения
  • Есть ли способ запросить отношения производных классов? Или, может быть, временно изменить объем?
  • Есть ли способ указать метку конечного узла ассоциации? Например, когда я запрашиваю Person.socials , могу ли я определить конечные метки, отличные от «Social», для AssociationProxy Person # social?

Я уже пробовал такие методы, как «scoping», «branch» и «as_models», но, насколько мне известно, ни один из них не работает.

Примечание. Работает следующий шифровальный запрос:

      MATCH (p:Person)
MATCH (p)-[:HAS_ACCOUNT]->(s:Social)
MATCH (s)-[:FRIENDS_WITH]->(f)
RETURN p.name

0 ответов

Другие вопросы по тегам