如何在 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 在创建标签时忽略模块名称。本周我打算在一些代码中使用它,但如果你想测试它,我们总是喜欢反馈。