1

我目前遇到一个问题,看起来 CypherNodes 没有正确转换为相应的模型对象。

有趣的是,如果我在本地清除我的数据库,错误就会停止发生,但肯定会在以后的某个时间发生。一旦它发生,它就会始终如一地产生错误。

出现问题的主要代码位类似于以下内容:

results = Club.query_as(:club)
             .match("(region:Region)-[:has_club]->(club)")
             .match("(club)-[:last_event]->()<-[:next*0..]-(event)-[:action]->(game)")
             .match("(game)<-[:action]-(:Event)<-[:next*0..]-()<-[:first_event]-(member:Member)")
             .where(region: { name: region_name }, club: { name: club_name })
             .order(event: { created_at: :desc })
             .limit(limit)
             .pluck(:member, :event, :game)


  results.map do |member, event, game|
    # Error occurs on 'game.name' as game is a CypherNode, not a Game object
    view_model = GameViewModel.new(game: game.name,
                                   member_name: member.nickname,
                                   created_at: event.created_at.to_i)
  end

当问题发生时,这会产生一个包含如下项目的数组:

[ 
  CypherNode 1139 (70254694683340), 
  #<Event uuid: "c3b81116-1be3-4722-8908-8c36d5c76fe3", created_at: Wed, 19 Aug 2015 03:53:43 +0000>, 
  CypherNode 993 (70254694681800)
 ]

如果我查看每个 CypherNode(node.labels、node.props),我可以看到它在数组中具有正确的标签,并且具有正确的属性。

成员模型相当复杂,但游戏模型非常简单,如下所示:

class Game
  include Neo4j::ActiveNode
  property :name, type: String
end

我有点坚持这一点,不知道到底该看什么。任何想法或建议将不胜感激!

4

2 回答 2

2

这与在 5.1.5 中修补的错误有关,在 5.2.0-5.2.2 中回归,在版本 5.2.3 中再次修复。https://github.com/neo4jrb/neo4j/issues/955解决了它。

于 2015-09-09T20:47:54.023 回答
0

这当然很奇怪!一些想法:

  • 我认为您已经涵盖了这一点,但标签应该是Memberand Game(区分大小写)。Member我在查询中看到了您的匹配,但没有看到Game(只要节点上的标签正确,这无关紧要,只是为了检查)
  • 如果您self.mapped_label_name在模型中使用可能会影响事物
  • 这些节点是否有多个标签?再说一次,我认为这不会有什么不同,但很高兴知道
于 2015-08-19T12:57:31.630 回答