2014-11-27 2 views
1

В моем предыдущем примере я имел этот запросNeo4j камень - Запрос от объекта массива

current_user.friends.events(:event, :rel).where("rel.admin = {admin_p} AND event.detail = {detail_p}").params(admin_p: true, detail_p: true).pluck(:event)

current_user.friends.events приносит мне до событий, чтобы продолжить свою цепь, но делает эту работу, если у меня уже есть объект который содержит массив событий?

В моем примере я пытаюсь использовать геокодер для приближения.

У меня есть мой пользователь и события, которые геокодированы.

Geocoder может сделать что-то вроде этого

Venue.near([40.71, 100.23], 20) # найти все OBJS в пределах 20 миль

Так что я могу по существу найти все события и хранить его в объекте. Теперь я могу использовать запрос neo4j для фильтрации этого объекта?

например.

array_object(:event, :rel).where("rel.admin = {admin_p} AND event.detail = {detail_p}").params(admin_p: true, detail_p: true).pluck(:event)

Даже если это работает, есть альтернативный способ сделать это?

ответ

1

Вы не можете вызвать методы прокси запроса в массиве, поэтому просто возьмите идентификаторы этих событий и соответствующим образом фильтруйте их.

current_user.friends.events(:e).where(neo_id: array_object.map { |e| e.neo_id }) 

Это будет фильтровать события друзей пользователя, которые находятся в этом массиве. Мы можем использовать neo_id в where для лучшей производительности.

+0

Могу ли я продолжить эту цепочку с помощью запросов cypher или это похоже на 1 или другое? например 'current_user.friends.events (: e,: rel) .where (neo_id: array_object.map {| e | e.neo_id}," rel.admin = {admin_p} И event.detail = {detail_p} "). params (admin_p: true, detail_p: true)) ' Это выглядит как беспорядок для меня, но я не могу его протестировать, пока не исправлю мою проблему входа (последний вопрос) – Clam

+0

Вы можете делать все, что хотите, это QueryProxy объект. Если вы начнете использовать основную ветвь, вы можете записать ее как 'current_user.friends.events.where (neo_id: array_object.map {| e | e.neo_id}, detail: true) .rel_where (admin: true)'. Не так грязно. – subvertallchris

+0

Я не мог заставить его работать с neo_id, но я сделал это с uuid. neo_id дает мне 'undefined method 'to_i' для [14, 15, 17]: Array' to_i находится внутри карты методов? в чем разница между neo_id и uuid? – Clam

Смежные вопросы