我在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属性可以解决我的问题,但我不知道如何实现它。
有什么想法吗?
答案 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忽略模块名称。本周我将把它用于某些代码,但是如果你想测试它,我们总是喜欢反馈。