2014-12-24 2 views
0

У меня есть два типа отношений между двумя классами. В одном из них мне нужно установить origin, но я не знаю, как это сделать. Любая идея?Проблема с происхождением отношений

class A 
    include Neo4j::ActiveNode 
    ... 
    has_many :out, :method1, model_class: B 
    has_many :out, :method2, model_class: B 
    ... 
end 

class B 
    include Neo4j::ActiveNode 
    ... 
    has_one :in, :something, model_class: A, origin: ????? 
    ... 
end 

График

Тип отношений по умолчанию один ("#" + имя метода).

http://i.imgur.com/3MtC0k3.png

ответ

2

Если вы посмотрите на the documentation on declaring origins я думаю, что проблема у Вас есть то, что вы не объявили second parameter that sets the method.

Так что в вашем классе A, вы можете сделать это:

has_many :out, :somethingHere :type1, model_class: B 

Тогда в B, вы можете сделать это:

has_one :in, :something, model_class: A, :origin: :somethingHere 

Я не могу сказать вам, что somethingHere должно быть из-за того, что вы не предоставили достаточной информации о том, что A и B должны сказать, что означало бы их связь.

+0

Я отредактирую вопрос, но это не так. – tehAnswer

+1

Это ответ. Опция 'origin' заставляет ассоциацию искать другую ассоциацию с тем же именем в соответствующей модели. Вы должны использовать 'has_one: in,: something, model_class: A, origin:: method1', а затем' B.first.something' будет использовать '# method1' в качестве своего типа отношения. – subvertallchris

+0

Дело в том, что вы ставите 'origin:: method1', каждый B с входящим отношением' # method2' возвращает 'nil'. Ты меня чувствуешь? – tehAnswer

0

В итоге я создал свой собственный метод. Это что-то вроде:

class A 
    include Neo4j::ActiveNode 
    ... 
    has_many :out, :method1, model_class: B 
    has_many :out, :method2, model_class: B 
    ... 
end 

class B 
    include Neo4j::ActiveNode 
    ... 
    # I removed has_one line and include: 
    def something 
    rel = rels(dir: :incoming).first 
    return nil if rel.nil? 
    rel.start_node 
    end 
    ... 
end 

Это хорошее решение? Комментарии, пожалуйста.

+0

Если он работает, он работает. Не собираюсь возражать против этого, но вам кажется странным определить настраиваемый метод, подобный этому, когда среда предоставляет крючки для определения таких методов для вас. – FrobberOfBits

+0

Да, я не понимаю, зачем это нужно. См. Мой комментарий к ответу FrobberOfBits. Вы можете выслать мне письмо по электронной почте, если вам нужна дополнительная помощь, я являюсь одним из тех, кто работает с камнем Neo4j. – subvertallchris

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