Neo4j gem - запрос определенных отношений

Существует множество способов получить шаблоны узлов и отношений и даже найти сами отношения на основе свойств отношений (например, EnrolledIn.where(since: 2002), но как лучше всего получить отношения на основе конкретных свойств узлов, например.

текущий_пользователь -[:отношения]->событие

Я знаю идентификатор события, поэтому для меня наиболее логичным способом является запрос шаблона с event.id в качестве одного из искомых свойств. у меня сейчас что-то подобное

event_rel = current_user.events(:e, :rel).where(id: event_id).pluck(:rel)

Вышеупомянутое не работает и возвращает массив


person Clam    schedule 22.11.2014    source источник


Ответы (1)


То, что вы делаете, в порядке, pluck(:rel) всегда будет возвращать массив. Если вы знаете, что вам нужен только один rel, просто сделайте

event_rel = current_user.events(:e, :rel).where(id: event_id).limit(1).pluck(:rel).first

Если вы используете ветку master из github, вы можете использовать метод first_rel_to, который (наряду с match_to) меняет то, как я в последнее время использую гем.

event_rel = current_user.events.first_rel_to(event_id)

Пару дней назад была добавлена ​​возможность дать ему идентификатор, он не будет работать, если вы берете из Rubygems. Версия метода в 3.0.4 не принимает идентификатор, она принимает только полный узел. Если у вас загружен узел, вы можете сделать event_rel = current_user.events.first_rel_to(event) в выпущенной версии.

Если вы не хотите использовать срывание, вы можете сделать event_rel = current_user.events.where(id: event_id). limit(1).each_rel.first. Просто имейте в виду, что это вернет все отношения между этими двумя узлами в Ruby, если вы опустите limit(1), поэтому не используйте его, если вы не уверены, что получите только один обратно. Я обычно добавляю limit(1), когда делаю это, даже если я думаю, что смогу вернуть только один rel, потому что я хочу быть в безопасности.

Я предлагаю вам указать свой Gemfile на самую последнюю фиксацию в Github, просто прочитайте новый раздел в вики об изменениях в 4.0. Это стабильно, и новые функции такие классные.

person subvertallchris    schedule 22.11.2014
comment
мы не смогли заставить его работать с описанным выше методом pluck, но с последним обновлением драгоценного камня мы можем использовать event_rel = current_user.events.first_rel_to(event) - person Clam; 23.11.2014