Использование has_many в neo4j.rb

Я ищу способ установить отношения между User, где вы можете использовать in, out и both одновременно в Neo4j.rb.

Вот что у меня есть до сих пор:

class User
  include Neo4j::ActiveNode

  has_many :both, :friends, type: :connection, model_class: User
  has_many :out, :following, type: :connection, model_class: User
  has_many :in, :followers, type: :connection, model_class: User
end

Следующие работы:

me = User.create
you = User.create

me.followers << you
me.followers.to_a
#=> [you]

you.following.to_a
#=> [me]

Противоположное вышесказанному также работает. Но это, похоже, не работает:

me.friends << you
you.following.to_a
#=> []

Or:

me.followers.to_a
#=> []

Однако это делает:

me.following.to_a
#=> [you]

person bswinnerton    schedule 08.04.2015    source источник


Ответы (1)


Это ожидаемое поведение. Neo4j не позволяет вам создавать отношения, у которых нет направления. Таким образом, тип ассоциации both предназначен только для запроса (то есть при запросе он указывает отношение, но не направление к/от узла).

Поскольку отношения Neo4j всегда имеют направление, когда вы создаете отношения с ассоциацией both, они создаются как отношения out. См. этот раздел в документах:

https://github.com/neo4jrb/neo4j/wiki/Neo4j-v3-Declared-Relationships#all-has_manyhas_one-method-calls-begin-with-declaration-of-direction

Размышляя об этом сейчас, мне интересно, возможно, Neo4j.rb не должен позволять вам создавать отношения с использованием both ассоциаций. Что вы думаете? Я также создам выпуск Github

person Brian Underwood    schedule 08.04.2015
comment
А, это имеет смысл. Копнув немного глубже, я не думаю, что эта функция мне понадобится в любом случае. - person bswinnerton; 08.04.2015
comment
Отлично ;) Еще одна вещь, которую я забыл упомянуть: вы должны привыкнуть использовать строки для model_class следующим образом: , model_class: 'User' - person Brian Underwood; 08.04.2015
comment
Сделаю! Благодаря тонну. - person bswinnerton; 08.04.2015