2012-12-18 81 views
0

我們在Neo4j上使用jRuby on Rails,並且出現了一些非常奇怪的錯誤。目前,我們有用戶可以創建帖子。很少,看起來他們在「帖子」關係中取代了Post對象而得到了解包的節點。例如,在控制檯上,我遍歷一個用戶的帖子,這就是它想出了:Neo4j-rails中看似裸露的節點

> user.posts.each{ |post| puts post } 
#<Post:0x49ca112d> 
#<Post:0xc9ddbea> 
#<Post:0x7e706c75> 
Node[438144] 
#<Post:0x769dba83> 

這是造成種種的問題,因爲我們得到這樣的錯誤,每當我們試圖訪問屬性或這些非後的某條信息的關係:

undefined method `[any property or relationship]' for #<Java::OrgNeo4jKernelImplCore::NodeProxy:0x461784b6> 

這些赤裸裸的節點似乎被添加到該人的「後」的關係斷斷續續,我可以手動刪除節點,但這似乎只是一個停停最好的差距措施,因爲他們不斷創造。因此,我的問題是,我如何(1)阻止首先創建這些非Post對象,以及如何(2)清除這些對象的數據庫?

回答

1

此行爲的一個原因可能是您在更新節點時使用protected_keys(僅在使用neo4j-wrapper gem時爲 )。

我懷疑由於某種原因_classname屬性已經消失(這可能發生在使用protected_keys conf,請參閱下面的github問題)。 例如您已向帖子關係添加了一篇帖子,該帖子不是帖子(它沒有值爲'Post'的_classname屬性)。

例如,如果你這樣做,你將有這樣的問題:

user.posts << Neo4j::Node.new 

我會建議一些調試,以確保您的所有文章對象都有一個屬性_className。

如果這是neo4j.rb中的錯誤,您可以執行下面的醜陋解決方法來加載包裝對象。

user.posts.map{|p| p.wrapper}.each{ |post| puts post } 

我以防萬一這一點,https://github.com/andreasronge/neo4j/issues/230 請添加更多的信息,我怎麼可能重現它,例如加入GitHub的問題neo4j和jruby的版本。 測試用例也會非常方便。