1

我在 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。我希望它改为产品

根据这篇文章似乎 _classname 属性可以解决我的问题,但我不知道如何实现它。

有任何想法吗?

4

1 回答 1

1

这里是 Neo4j.rb 的共同维护者和_classname. _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 在创建标签时忽略模块名称。本周我将把它用在一些代码中,但如果你想测试它,我们总是喜欢反馈。

于 2015-05-09T21:01:18.053 回答