【问题标题】:Seemingly naked nodes in Neo4j-railsNeo4j-rails 中看似裸露的节点
【发布时间】:2012-12-18 17:49:28
【问题描述】:

我们正在使用带有 Neo4j 的 jRuby on Rails,但我们遇到了一些非常奇怪的错误。目前,我们有用户能够创建帖子。很少,他们似乎在他们的“帖子”关系中得到了展开的节点,而不是 Post 对象。例如,在控制台中,我迭代了一个用户的帖子,结果如下:

> 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) 清除我的数据库中的这些对象?

【问题讨论】:

    标签: neo4j jrubyonrails


    【解决方案1】:

    这种行为的一个原因可能是您在更新节点时使用了protected_keys ( 仅使用 neo4j-wrapper gem 时)。

    我怀疑 _classname 属性由于某种原因消失了(使用protected_keys conf 可能会发生这种情况,请参阅下面的 github 问题)。 例如。您已将帖子添加到不是帖子的用户帖子关系(它没有值为“帖子”的 _classname 属性)。

    例如,如果你这样做,你会遇到这个问题:

    user.posts << Neo4j::Node.new
    

    我建议您进行一些调试,以确保您的所有帖子对象都具有 _classname 属性。

    如果它是 neo4j.rb 中的错误,您可以执行以下丑陋的解决方法来加载包装的对象。

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

    我添加了一个 github 问题以防万一,https://github.com/andreasronge/neo4j/issues/230 请添加更多信息如何重现它,例如neo4j 和 jruby 的版本。 测试用例也很方便。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-01
      • 2018-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-25
      相关资源
      最近更新 更多