如何在 Neo4jrb 中指定节点标签
How to specify Node Label in Neo4jrb
我在 Neo4jrb 中自定义节点标签时遇到问题。
class Core::Product
include Neo4j::ActiveNode
id_property :id
property :name
property :code
property :stock_quantity, type: Integer
property :sale_price, type: Float
property :last_update, type: DateTime
end
当我创建新节点时,它的标签为Core::Product。我希望它成为 Product。
根据 this post 看来 _classname 属性 可以解决我的问题,但我不知道如何实现它。
有什么想法吗?
这里 Neo4j.rb 的共同维护者和 _classname
的 author/responsible 派对。 _classname
在这一点上是一个非常传统的选项,是从某些数据库响应不包括节点标签或关系类型时遗留下来的。您可以通过在模型中调用 self.mapped_label_name =
来覆盖自动标签分配。
class Core::Product
include Neo4j::ActiveNode
self.mapped_label_name = 'Product'
# etc,...
end
您还需要注意,关联模型的自动定位将无法正常工作,因此请改为:
has_many :out, :products, type: 'HAS_PRODUCT'
您需要这样做:
has_many :out, :products, model_class: 'Core::Product', type: 'HAS_PRODUCT'
我们有一个讨论它的未决问题 https://github.com/neo4jrb/neo4j/issues/753。我为我的模型命名空间来组织代码,但希望我的标签忽略它们,所以我喜欢一个配置选项来为我处理这个问题。
跟进
我刚刚将 https://github.com/neo4jrb/neo4j/pull/790 合并到 master 中。它让您告诉 gem 在创建标签时忽略模块名称。本周我打算在一些代码中使用它,但如果你想测试它,我们总是喜欢反馈。
我在 Neo4jrb 中自定义节点标签时遇到问题。
class Core::Product
include Neo4j::ActiveNode
id_property :id
property :name
property :code
property :stock_quantity, type: Integer
property :sale_price, type: Float
property :last_update, type: DateTime
end
当我创建新节点时,它的标签为Core::Product。我希望它成为 Product。
根据 this post 看来 _classname 属性 可以解决我的问题,但我不知道如何实现它。
有什么想法吗?
这里 Neo4j.rb 的共同维护者和 _classname
的 author/responsible 派对。 _classname
在这一点上是一个非常传统的选项,是从某些数据库响应不包括节点标签或关系类型时遗留下来的。您可以通过在模型中调用 self.mapped_label_name =
来覆盖自动标签分配。
class Core::Product
include Neo4j::ActiveNode
self.mapped_label_name = 'Product'
# etc,...
end
您还需要注意,关联模型的自动定位将无法正常工作,因此请改为:
has_many :out, :products, type: 'HAS_PRODUCT'
您需要这样做:
has_many :out, :products, model_class: 'Core::Product', type: 'HAS_PRODUCT'
我们有一个讨论它的未决问题 https://github.com/neo4jrb/neo4j/issues/753。我为我的模型命名空间来组织代码,但希望我的标签忽略它们,所以我喜欢一个配置选项来为我处理这个问题。
跟进
我刚刚将 https://github.com/neo4jrb/neo4j/pull/790 合并到 master 中。它让您告诉 gem 在创建标签时忽略模块名称。本周我打算在一些代码中使用它,但如果你想测试它,我们总是喜欢反馈。