Neo4j gem CypherNode 的未定义方法“名称”
Neo4j gem undefined method `name' for CypherNode
我目前遇到一个问题,似乎 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
我有点被这个困住了,不知道到底要看什么。任何想法或建议将不胜感激!
这当然很奇怪!一些想法:
- 我想你已经讲过了,但标签应该是
Member
和 Game
(区分大小写)。我在查询中看到 Member
上的匹配,但 Game
上没有(只要节点上的标签正确,这并不重要,只是为了检查)
- 如果您在模型中使用
self.mapped_label_name
可能会影响事情
- 这些节点是否有多个标签?同样,我不认为这会有所作为,但很高兴知道
这与一个在 5.1.5 中修补,在 5.2.0-5.2.2 中回归,在 5.2.3 版本中再次修复的错误有关。 https://github.com/neo4jrb/neo4j/issues/955 处理它。
我目前遇到一个问题,似乎 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
我有点被这个困住了,不知道到底要看什么。任何想法或建议将不胜感激!
这当然很奇怪!一些想法:
- 我想你已经讲过了,但标签应该是
Member
和Game
(区分大小写)。我在查询中看到Member
上的匹配,但Game
上没有(只要节点上的标签正确,这并不重要,只是为了检查) - 如果您在模型中使用
self.mapped_label_name
可能会影响事情 - 这些节点是否有多个标签?同样,我不认为这会有所作为,但很高兴知道
这与一个在 5.1.5 中修补,在 5.2.0-5.2.2 中回归,在 5.2.3 版本中再次修复的错误有关。 https://github.com/neo4jrb/neo4j/issues/955 处理它。