2015-10-07 4 views
0

У меня есть пользователь, говорящий на нескольких языках. Я пишу запрос, чтобы узнать, говорит ли пользователь по-английски. Я хочу узнать, говорит ли пользователь на английском языке, если существует связь между пользовательским узлом и узлом языка. Я делаю это, используя rels.to_other или rels.to_others. Оба отказались, как описано ниже. И Кстати, в чем разница между методами «to_other» и «to_others»?Neo4j rels.to_other метод с ошибкой

irb(main):105:0> u 
=> #<User uuid: "b1461edd-a574-44a7-9555-68659a361be2", created_at: Tue, 06 Oct 2015 16:21:26 +0000, name: "Levi Damian", type: "Regular", updated_at: Tue, 06 Oct 2015 16:21:26 +0000> 

irb(main):106:0> l 
=> #<Language uuid: "e388eb70-66b2-4b20-8f15-6ca11b34d03d", name: "English"> 

irb(main):107:0> u.rels.to_other(l) 
CYPHER 802ms MATCH n, (n)-[r]-(p) WHERE (ID(n) = {ID_n}) RETURN r as result | {:ID_n=>38} 
NoMethodError: CYPHER 125ms MATCH n WHERE (ID(n) = {ID_n}) RETURN n | {:ID_n=>38} 
CYPHER 125ms MATCH n WHERE (ID(n) = {ID_n}) RETURN n | {:ID_n=>43} 
CYPHER 125ms MATCH n WHERE (ID(n) = {ID_n}) RETURN n | {:ID_n=>38} 
CYPHER 124ms MATCH n WHERE (ID(n) = {ID_n}) RETURN n | {:ID_n=>42} 
CYPHER 128ms MATCH n WHERE (ID(n) = {ID_n}) RETURN n | {:ID_n=>38} 
CYPHER 130ms MATCH n WHERE (ID(n) = {ID_n}) RETURN n | {:ID_n=>41} 
CYPHER 124ms MATCH n WHERE (ID(n) = {ID_n}) RETURN n | {:ID_n=>38} 
CYPHER 125ms MATCH n WHERE (ID(n) = {ID_n}) RETURN n | {:ID_n=>86} 
CYPHER 124ms MATCH n WHERE (ID(n) = {ID_n}) RETURN n | {:ID_n=>38} 
CYPHER 129ms MATCH n WHERE (ID(n) = {ID_n}) RETURN n | {:ID_n=>87} 
undefined method `to_other' for #<Array:0x007fedc2d6b980> 
    from (irb):107 
    from /Users/levi/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/commands/console.rb:110:in `start' 

Почему эта ошибка и как я могу заставить ее работать?

ответ

1

rels немедленно возвращает все отношения с этого узла на ... все. Он возвращает массив, следовательно, ошибку. Это может быть чрезвычайно медленная операция с интенсивной памятью, если у вас есть узел со многими отношениями.

Предполагаете, что у вас есть ассоциация languages в вашей модели, вы можете сделать вместо этого u.languages.match_to(l).exists?. Он возвращает логическое значение и не возвращает никаких объектов графа. Вы также можете использовать blank? или empty?.

+0

u.languages.match_to (l) .exist? NoMethodError: неопределенный метод 'существуют? ' для # из /Users/levi/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/neo4j-5.2.9 /lib/neo4j/active_node/query/query_proxy.rb:232:in 'method_missing ' – LDB

+0

u.languages.match_to (l) .count Языки пользователя # 778ms MATCH user0 WHERE (ID (user0) = {ID_user0}) MATCH user0 - [rel1: 'COMMUNICATING_IN'] -> (result_languages:' Язык') WHERE (ID (result_languages) = {ID_result_languages}) RETURN count (result_languages) AS result_languages ​​| {: ID_user0 => 0,: ID_result_languages ​​=> 3} => 1 – LDB

+0

Это 'существует?', С s. Я обновил свой ответ, чтобы отразить это. – subvertallchris

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

  • Нет связанных вопросов^_^