如何在Neo4jrb

时间:2015-05-07 03:13:02

标签: neo4j.rb

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

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

有什么想法吗?

1 个答案:

答案 0 :(得分: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合并为主人。它允许您在创建标签时告诉gem忽略模块名称。本周我将把它用于某些代码,但是如果你想测试它,我们总是喜欢反馈。