2015-01-13 22 views
0

問題:依賴銷燬不會發生在這個設置!幫助我發現問題!Neo4j寶石依賴:: destroy不破壞

的事件有問題,每一個問題可以有很多答案

event.rb

include Neo4j::ActiveNode 

    has_many :both, :users, model_class: 'User', rel_class: 'Invite' 
    has_many :in, :event_questions, type: 'questions_of', dependent: :destroy 

eventquestion.rb

include Neo4j::ActiveNode 

    has_one :out, :event, origin: :event_questions 
    has_many :in, :event_answers, type: 'answers_of', dependent: :destroy 

eventanswer.rb

include Neo4j::ActiveNode 

    has_one :out, :event_question, origin: :event_answers 

event_con troller.rb

if event.destroy 
     location.destroy 
     flash[:success] = "Event deleted" 
    else 

我在neo4j master分支。

gemlock表示

neo4j (4.1.0) 
    active_attr (~> 0.8) 
    activemodel (~> 4) 
    activesupport (~> 4) 
    neo4j-core (~> 4.0.0) 
    orm_adapter (~> 0.5.0) 
    railties (~> 4) 

我不認爲是完全相關的,但也許我瘋..但我有一個

before_action :admin_or_owner, only: [:destroy] 
我eventquestion.rb

和eventanswer.rb

但是,我沒有調用控制器方法銷燬我的依賴銷燬,所以這應該不重要?

+0

你是怎麼打電話給摧毀的?只是'event.destroy'? –

+0

此外,關係類型的語言似乎有點混亂。我期望'answers_of'和'questions_of'是另一個方向。或者你也可以有'(event) - [:has_question] - >(question)'和'(question)< - [:answers] - (answer)' –

+0

是的,這只是一個if else case。只是以第一部分爲例。我一直認爲,有點像一個屬於聯想,event_question屬於事件,event_answers屬於event_questions – Clam

回答

1

我認爲在您的應用中還有其他事情發生,因爲如上所述,使用提供的代碼,一切都按照我的預期完成。我使用提供的代碼構建了應用程序的這一部分。

class Event 
    include Neo4j::ActiveNode 
    has_many :both, :users, model_class: 'User', rel_class: 'Invite' 
    has_many :in, :event_questions, type: 'questions_of', dependent: :destroy 
end 

class User 
    include Neo4j::ActiveNode 
    has_many :both, :events, rel_class: 'Invite' 
end 

class Invite 
    include Neo4j::ActiveRel 
    from_class User 
    to_class Event 

    type 'INVITED_TO' 
end 

class EventQuestion 
    include Neo4j::ActiveNode 
    has_one :out, :event, origin: :event_questions 
    has_many :in, :event_answers, type: 'answers_of', dependent: :destroy 
end 


class EventAnswer 
    include Neo4j::ActiveNode 
    has_one :out, :event_question, origin: :event_answers 

end 

在這裏,我創建了兩個事件,三個問題,三個答案,並將它們連接在一起。你可以看到,摧毀事件破壞了它的問題,反過來又摧毀了他們的答案。

e1 = Event.create 
=> #<Event> 
2.2.0 :052 > e2 = Event.create 
=> #<Event> 
2.2.0 :053 > q1 = EventQuestion.create 
=> #<EventQuestion> 
2.2.0 :054 > q2 = EventQuestion.create 
=> #<EventQuestion> 
2.2.0 :055 > q3 = EventQuestion.create 
=> #<EventQuestion> 
2.2.0 :056 > a1 = EventAnswer.create 
=> #<EventAnswer> 
2.2.0 :057 > a2 = EventAnswer.create 
=> #<EventAnswer> 
2.2.0 :058 > a3 = EventAnswer.create 
=> #<EventAnswer> 
2.2.0 :059 > 
2.2.0 :060 > e1.event_questions << q1 
CYPHER 4ms MATCH (start:`Event`), (end:`EventQuestion`) WHERE ID(start) = {start_id} AND ID(end) = {end_id} CREATE start<-[rel0:`questions_of`]-end | {:start_id=>23, :end_id=>25} 
=> #<Neo4j::ActiveNode::Query::QueryProxy:0x007fc05e0f3248 @model=EventQuestion, @association=#<Neo4j::ActiveNode::HasN::Association:0x007fc05e170590 @type=:has_many, @name=:event_questions, @direction=:in, @target_class_name_from_name="EventQuestion", @target_class_option="::EventQuestion", @callbacks={:before=>nil, :after=>nil}, @origin=nil, @relationship_class=nil, @relationship_type=:questions_of, @dependent=:destroy, @unique=nil, @target_class_name="::EventQuestion", @target_class_name_or_nil="::EventQuestion">, @context="Event#event_questions", @options={:session=>Neo4j::Server::CypherSession url: 'http://localhost:7474/db/data/' version: '2.2.0-M01', :start_object=>#<Event>, :node=>nil, :rel=>nil, :caller=>#<Event>}, @node_var=nil, @rel_var=:rel0, @session=Neo4j::Server::CypherSession url: 'http://localhost:7474/db/data/' version: '2.2.0-M01', @caller=#<Event>, @chain=[], @starting_query=nil, @optional=nil, @params={}> 
2.2.0 :061 > e1.event_questions << q2 
CYPHER 4ms MATCH (start:`Event`), (end:`EventQuestion`) WHERE ID(start) = {start_id} AND ID(end) = {end_id} CREATE start<-[rel0:`questions_of`]-end | {:start_id=>23, :end_id=>26} 
=> #<Neo4j::ActiveNode::Query::QueryProxy:0x007fc05e1f08f8 @model=EventQuestion, @association=#<Neo4j::ActiveNode::HasN::Association:0x007fc05e170590 @type=:has_many, @name=:event_questions, @direction=:in, @target_class_name_from_name="EventQuestion", @target_class_option="::EventQuestion", @callbacks={:before=>nil, :after=>nil}, @origin=nil, @relationship_class=nil, @relationship_type=:questions_of, @dependent=:destroy, @unique=nil, @target_class_name="::EventQuestion", @target_class_name_or_nil="::EventQuestion">, @context="Event#event_questions", @options={:session=>Neo4j::Server::CypherSession url: 'http://localhost:7474/db/data/' version: '2.2.0-M01', :start_object=>#<Event>, :node=>nil, :rel=>nil, :caller=>#<Event>}, @node_var=nil, @rel_var=:rel0, @session=Neo4j::Server::CypherSession url: 'http://localhost:7474/db/data/' version: '2.2.0-M01', @caller=#<Event>, @chain=[], @starting_query=nil, @optional=nil, @params={}> 
2.2.0 :062 > e2.event_questions << q3 
CYPHER 3ms MATCH (start:`Event`), (end:`EventQuestion`) WHERE ID(start) = {start_id} AND ID(end) = {end_id} CREATE start<-[rel0:`questions_of`]-end | {:start_id=>24, :end_id=>27} 
=> #<Neo4j::ActiveNode::Query::QueryProxy:0x007fc05e300108 @model=EventQuestion, @association=#<Neo4j::ActiveNode::HasN::Association:0x007fc05e170590 @type=:has_many, @name=:event_questions, @direction=:in, @target_class_name_from_name="EventQuestion", @target_class_option="::EventQuestion", @callbacks={:before=>nil, :after=>nil}, @origin=nil, @relationship_class=nil, @relationship_type=:questions_of, @dependent=:destroy, @unique=nil, @target_class_name="::EventQuestion", @target_class_name_or_nil="::EventQuestion">, @context="Event#event_questions", @options={:session=>Neo4j::Server::CypherSession url: 'http://localhost:7474/db/data/' version: '2.2.0-M01', :start_object=>#<Event>, :node=>nil, :rel=>nil, :caller=>#<Event>}, @node_var=nil, @rel_var=:rel0, @session=Neo4j::Server::CypherSession url: 'http://localhost:7474/db/data/' version: '2.2.0-M01', @caller=#<Event>, @chain=[], @starting_query=nil, @optional=nil, @params={}> 
2.2.0 :063 > q1.event_answers << a1 
CYPHER 3ms MATCH (start:`EventQuestion`), (end:`EventAnswer`) WHERE ID(start) = {start_id} AND ID(end) = {end_id} CREATE start<-[rel0:`answers_of`]-end | {:start_id=>25, :end_id=>28} 
=> #<Neo4j::ActiveNode::Query::QueryProxy:0x007fc05e350c20 @model=EventAnswer, @association=#<Neo4j::ActiveNode::HasN::Association:0x007fc05bc4f2c0 @type=:has_many, @name=:event_answers, @direction=:in, @target_class_name_from_name="EventAnswer", @target_class_option="::EventAnswer", @callbacks={:before=>nil, :after=>nil}, @origin=nil, @relationship_class=nil, @relationship_type=:answers_of, @dependent=:destroy, @unique=nil, @target_class_name="::EventAnswer", @target_class_name_or_nil="::EventAnswer">, @context="EventQuestion#event_answers", @options={:session=>Neo4j::Server::CypherSession url: 'http://localhost:7474/db/data/' version: '2.2.0-M01', :start_object=>#<EventQuestion>, :node=>nil, :rel=>nil, :caller=>#<EventQuestion>}, @node_var=nil, @rel_var=:rel0, @session=Neo4j::Server::CypherSession url: 'http://localhost:7474/db/data/' version: '2.2.0-M01', @caller=#<EventQuestion>, @chain=[], @starting_query=nil, @optional=nil, @params={}> 
2.2.0 :064 > q2.event_answers << a2 
CYPHER 4ms MATCH (start:`EventQuestion`), (end:`EventAnswer`) WHERE ID(start) = {start_id} AND ID(end) = {end_id} CREATE start<-[rel0:`answers_of`]-end | {:start_id=>26, :end_id=>29} 
=> #<Neo4j::ActiveNode::Query::QueryProxy:0x007fc05e4003a0 @model=EventAnswer, @association=#<Neo4j::ActiveNode::HasN::Association:0x007fc05bc4f2c0 @type=:has_many, @name=:event_answers, @direction=:in, @target_class_name_from_name="EventAnswer", @target_class_option="::EventAnswer", @callbacks={:before=>nil, :after=>nil}, @origin=nil, @relationship_class=nil, @relationship_type=:answers_of, @dependent=:destroy, @unique=nil, @target_class_name="::EventAnswer", @target_class_name_or_nil="::EventAnswer">, @context="EventQuestion#event_answers", @options={:session=>Neo4j::Server::CypherSession url: 'http://localhost:7474/db/data/' version: '2.2.0-M01', :start_object=>#<EventQuestion>, :node=>nil, :rel=>nil, :caller=>#<EventQuestion>}, @node_var=nil, @rel_var=:rel0, @session=Neo4j::Server::CypherSession url: 'http://localhost:7474/db/data/' version: '2.2.0-M01', @caller=#<EventQuestion>, @chain=[], @starting_query=nil, @optional=nil, @params={}> 
2.2.0 :065 > q3.event_answers << a3 
CYPHER 4ms MATCH (start:`EventQuestion`), (end:`EventAnswer`) WHERE ID(start) = {start_id} AND ID(end) = {end_id} CREATE start<-[rel0:`answers_of`]-end | {:start_id=>27, :end_id=>30} 
=> #<Neo4j::ActiveNode::Query::QueryProxy:0x007fc05e4c1708 @model=EventAnswer, @association=#<Neo4j::ActiveNode::HasN::Association:0x007fc05bc4f2c0 @type=:has_many, @name=:event_answers, @direction=:in, @target_class_name_from_name="EventAnswer", @target_class_option="::EventAnswer", @callbacks={:before=>nil, :after=>nil}, @origin=nil, @relationship_class=nil, @relationship_type=:answers_of, @dependent=:destroy, @unique=nil, @target_class_name="::EventAnswer", @target_class_name_or_nil="::EventAnswer">, @context="EventQuestion#event_answers", @options={:session=>Neo4j::Server::CypherSession url: 'http://localhost:7474/db/data/' version: '2.2.0-M01', :start_object=>#<EventQuestion>, :node=>nil, :rel=>nil, :caller=>#<EventQuestion>}, @node_var=nil, @rel_var=:rel0, @session=Neo4j::Server::CypherSession url: 'http://localhost:7474/db/data/' version: '2.2.0-M01', @caller=#<EventQuestion>, @chain=[], @starting_query=nil, @optional=nil, @params={}> 
2.2.0 :066 > 
2.2.0 :067 > Event.count 
CYPHER 4ms MATCH (n:`Event`) RETURN count(n) AS count 
=> 2 
2.2.0 :068 > EventQuestion.count 
CYPHER 3ms MATCH (n:`EventQuestion`) RETURN count(n) AS count 
=> 3 
2.2.0 :069 > EventAnswer.count 
CYPHER 3ms MATCH (n:`EventAnswer`) RETURN count(n) AS count 
=> 3 
2.2.0 :070 > 
2.2.0 :071 > e1.destroy 
Event#event_questions 31ms MATCH (event23:`Event`), (result_event_questions:`EventQuestion`), event23<-[rel0:`questions_of`]-(result_event_questions:`EventQuestion`) WHERE ID(event23) = {ID_event23} RETURN result_event_questions | {:ID_event23=>23} 
EventQuestion#event_answers 29ms MATCH (eventquestion26:`EventQuestion`), (result_event_answers:`EventAnswer`), eventquestion26<-[rel0:`answers_of`]-(result_event_answers:`EventAnswer`) WHERE ID(eventquestion26) = {ID_eventquestion26} RETURN result_event_answers | {:ID_eventquestion26=>26} 
EventQuestion#event_answers 31ms MATCH (eventquestion25:`EventQuestion`), (result_event_answers:`EventAnswer`), eventquestion25<-[rel0:`answers_of`]-(result_event_answers:`EventAnswer`) WHERE ID(eventquestion25) = {ID_eventquestion25} RETURN result_event_answers | {:ID_eventquestion25=>25} 
=> true 
2.2.0 :072 > EventQuestion.count 
CYPHER 4ms MATCH (n:`EventQuestion`) RETURN count(n) AS count 
=> 1 
2.2.0 :073 > EventAnswer.count 
CYPHER 3ms MATCH (n:`EventAnswer`) RETURN count(n) AS count 
=> 1 
2.2.0 :074 > 
2.2.0 :075 > e2.destroy 
Event#event_questions 31ms MATCH (event24:`Event`), (result_event_questions:`EventQuestion`), event24<-[rel0:`questions_of`]-(result_event_questions:`EventQuestion`) WHERE ID(event24) = {ID_event24} RETURN result_event_questions | {:ID_event24=>24} 
EventQuestion#event_answers 29ms MATCH (eventquestion27:`EventQuestion`), (result_event_answers:`EventAnswer`), eventquestion27<-[rel0:`answers_of`]-(result_event_answers:`EventAnswer`) WHERE ID(eventquestion27) = {ID_eventquestion27} RETURN result_event_answers | {:ID_eventquestion27=>27} 
=> true 
2.2.0 :076 > EventQuestion.count 
CYPHER 3ms MATCH (n:`EventQuestion`) RETURN count(n) AS count 
=> 0 
2.2.0 :077 > EventAnswer.count 
CYPHER 3ms MATCH (n:`EventAnswer`) RETURN count(n) AS count 
=> 0 
2.2.0 :078 > 
+0

這個問題我已經更多地將我的'event'問題隔離爲'event_question'設置..如果我點擊我對'event_question'控制器的摧毀行爲,'event_answers'確實毀了。仍然不確定在哪裏查看,因爲剩餘的銷燬代碼正在執行諸如更改用戶事件計數等操作。 'user.events_attended - = 1'等等。'user.save' – Clam

+0

所以無論出於何種原因,改變這些屬性值都會干擾它。我所做的是將其移至毀滅行動之後。如果我以前有過,它打破了連鎖破壞。 – Clam