Как переопределить основной идентификатор узла 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-логику.