Как мне создать отношения Neo4j через консоль rails?

В настоящее время я работаю над этим руководством, и я застрял, когда дело доходит до создания отношения в консоли рельсов. Я прочитал документацию по проекту Neo4jrb и сообщение в блоге на jayway.com, но до сих пор не могу понять.

Я создал сайт rails и хочу создать узлы команд, узлы лиг и отношения между ними в базе данных Neo4j, используя мои сценарии rails. У меня две модели:

Один для лиги

class Team 
include Neo4j::ActiveNode
property :name, type: String

has_one :out, :league, type: :PLAY_IN

end

Один для команды

class League 
include Neo4j::ActiveNode
property :name, type: String
property :rank, type: Integer

has_many :in, :teams, origin: :league

end

Используя консоль rails, я могу создать узел, используя этот код:

League.create(name: "League 2")

Как с помощью консоли создать связь между двумя узлами, как определено в моих моделях?

Вот мой код в github. Заранее спасибо!

** Редактировать **

Удалено: model_class


person Chris    schedule 11.06.2015    source источник


Ответы (1)


Существует пример создания связи между узлами под заголовком Associations раздела ActiveNode вики, https://github.com/neo4jrb/neo4j/wiki/Neo4j%3A%3AActiveNode#associations. Вы делаете node_a.association_name << node_b. team.league = league и league.teams << team создадут одну и ту же связь, поскольку вы настроили их для ссылки на один и тот же тип связи и взаимные направления в базе данных.

В вики есть тонна информации, я предлагаю вам прочитать все современные материалы. Не беспокойтесь ни о чем в разделе «Наследие». Работа над новыми документами также ведется по адресу http://neo4jrb.readthedocs.org/en/stable/ но еще кое-что нужно сделать. Также есть чат по адресу https://gitter.im/neo4jrb/neo4j, если вы когда-нибудь захотите говорить через что-л.

** РЕДАКТИРОВАТЬ **

Как заметил Брайан, есть проблема с вашим model_class. Я сосредоточился на том, как вы это делаете, и не смотрел слишком внимательно на модели, смотрите его комментарии для информации.

person subvertallchris    schedule 11.06.2015
comment
Я бы добавил пару вещей. Вы также можете сделать team.league.create(other_node, property: value), если хотите поместить свойства в отношение - person Brian Underwood; 11.06.2015
comment
Другое дело, что я думаю, что вы используете model_class в декларации ассоциации неправильно. Например, для вашей ассоциации Team.league вы объявляете model_class из Team. Однако model_class относится к цели ассоциации, поэтому должно быть League. Но на самом деле вам не нужно указывать model_class в этом случае, потому что имя ассоциации :league будет автоматически угадывать League как model_class. То же самое касается ассоциации в другой модели - person Brian Underwood; 11.06.2015
comment
Круто, спасибо ребята! Я удалил model_class. Я также читал вики, вы, ребята, выложили массу отличной информации! Я понимаю это в теории, но я все еще немного запутался, когда дело доходит до создания отношений на практике. Я думаю, что это отчасти потому, что я все еще думаю в шифре. - person Chris; 12.06.2015
comment
Потерпите меня здесь. Если мы скажем, что в шифре CREATE (n:League {name: "League 1"}) равно следующему коду в консоли rails, работающему против вышеуказанных моделей rails: League.create(name: "League 2"), как мне перейти оттуда к MATCH (n:Team {name: "Team 2"}), (m:League {name: "League 2"}) CREATE (n)-[r:PLAY_IN]->(m)? Как указать узлы, когда вы делаете league.teams << team? - person Chris; 12.06.2015
comment
Кроме того, немного отдельный вопрос... когда я запускаю league.teams << team, я получаю NameError: undefined local variable or method league' для main:Object`. Я знаю, что мне здесь чего-то не хватает, но я не уверен, что именно. - person Chris; 12.06.2015
comment
Упс. Опечатка во втором комментарии. Первый блок шифркода должен быть CREATE (n:League {name: "League 2"}) - person Chris; 12.06.2015
comment
Почему бы вам не зайти на gitter.im/neo4jrb/neo4j завтра, мы с Брайаном обычно вокруг весь день и может помочь вам. - person subvertallchris; 12.06.2015
comment
Но чтобы ответить на ваши конкретные вопросы, ознакомьтесь с gist.github.com/subvertallchris/ce2b9a7415865a166467. Примеры. team и league должны быть экземплярами узлов. - person subvertallchris; 12.06.2015
comment
А, разобрался! Сначала сопоставьте два узла: team_2 = Team.where(name: "Team 2").first и league_2 = League.where(name: "League 2").first. Затем создайте связь между ними: team_2.create_rel(:PLAY_IN, league_2) - person Chris; 12.06.2015