我知道 gem 没有内置的方法来处理依赖关系破坏,但就像活动记录一样dependant: destroy
有没有更好的方法来处理链破坏?
例如,现在我正在尝试用我的 Q+A 来处理破坏
每个问题都有很多答案,每个答案都有一个问题
破坏问题可以这样做
event_question = EventQuestion.find(params[:id])
event_question.destroy
但是如果我需要处理答案,并且我通过这个关联来完成,我必须循环并销毁每一个。另一个弱点是需要检查依赖节点/关系是否存在。
写出更长的查询来处理找到问题和答案并一口气销毁它们会更好吗?(或者......你可以吗?)我知道你不能像这样破坏查询代理(例如event_question.answers.destroy
)
更新
我尝试使用 delete 实现这两个查询,但 delete 不执行。现在没有错误信息。窥探该方法,匹配看起来正确。
event.users(:u,:rel).query.match("()-[r3]-u").delete(:r3).exec
event.event_questions(:q).event_answers(:a).query.match("event-[r0]-(), q-[r1]-(), a-[r2]-()").delete(:q, :a, :event).exec
更新 2
这是第一个的密码查询event.users
。
MATCH (event13:`Event`), (u:`User`), event13-[rel:`invited`]-(u:`User`), ()-[r3]-u WHERE ID(event13) = {ID_event13} DELETE r3"
看起来对吗?但删除似乎没有执行。附加as
或query_as
不允许查询通过第二个。它给了我未定义的方法as
最后更新
在转到另一个问题之前的最后更新。
奇怪的是,我可以通过这个获得第一个删除关系的查询
event.users(:u,:r3).query.match("()-[r]-u").delete(:r3).exec
但是下一个查询不会删除问题和答案。
event.event_questions(:q).event_answers(:a).query.match("q-[r1]-(), a-[r2]-()").delete(:q, :a).exec
我不完全确定为什么需要匹配,但没有它,它也不会执行。当我在我的 Questions/Answers 控制器上编写销毁函数时,我实际上不必删除该关系。但也许我做了一些时髦的事情。
我实际上是这样做的
answers = event_question.event_answers
然后循环它并破坏每个答案,这似乎破坏了答案以及与问题的关系。Q+A 是通过关联而不是 ActiveRel 设置的。不确定这是否会有所不同。