如何覆盖ruby neo4j节点主id

时间:2017-10-26 15:29:53

标签: ruby neo4j neo4j.rb

我有以下型号:

class User
  include Neo4j::ActiveNode
end

我只想在创建时指定主键:

user = User.create(id: SecureRandom.uuid)

但是,这不起作用并返回Undefined properties: id。 我尝试过使用自定义id_property定义:

class User
  include Neo4j::ActiveNode
  id_property :user_id
end

虽然这有效但在执行User.create时不会提供默认ID。所以我试过了:

class User
  include Neo4j::ActiveNode
  id_property :user_id, auto: :uuid
end

将分配默认的uuid,但不再允许User.create(user_id: xxx)

这让我抓狂!我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:1)

这是gem的一个长期问题,您无法在节点上设置自己的ID。

SecureRandom.uuid只是一个例子吗?因为它恰好用于:uuid策略(这是id属性的默认值)。我不确定你要做的是什么。

GraphAware UUID插件很棒,但我不知道它如何与想要生成它自己的ID的gem一起使用。您可以创建自己的UUID生成器,它只生成nil值并让插件设置ID(此时gem不关心该值,只要它'现在和独特)。不幸的是,宝石不能依赖于它所使用的所有Neo4j服务器上安装的插件。

希望有一天在不久的将来,Neo4j将支持不会被回收的ID,这样宝石就不需要拥有它自己的UUID逻辑