Как переопределить основной идентификатор узла ruby ​​neo4j

У меня есть следующая модель:

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, Итак, я попробовал:

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

который назначит uuid по умолчанию, но не позволяет User.create(user_id: xxx) больше!

Это сводит меня с ума! Я что-то здесь упускаю?

1 ответ

Это давняя проблема с гемом, из-за которой вы не можете установить свои собственные идентификаторы для узлов.

Это SecureRandom.uuid просто пример? Потому что это именно то, что используется для :uuid стратегия (которая по умолчанию для id имущество). Я не уверен, чего вы пытаетесь достичь.

Плагин GraphAware UUID великолепен, хотя я не знаю, как он будет работать с гемом, который хочет генерировать свои собственные идентификаторы. Вы можете создать свой собственный генератор UUID, который просто генерирует nil значения и плагин let устанавливают идентификатор (в этот момент гем не заботится о значении, пока он присутствует и уникален). К сожалению, гем не может зависеть от того, какой плагин установлен на всех серверах Neo4j, на которых он используется.

Надеемся, что когда-нибудь в ближайшем будущем Neo4j будет поддерживать идентификаторы, которые не будут переработаны, так что гему не нужно будет иметь собственную UUID-логику.

Другие вопросы по тегам