Neo4jrb:model_class 的枚举器:false

Neo4jrb: Enumerator for model_class: false

当指定 model_class of false 时,预计从该节点到另一个节点的连接可以是任何其他 class 节点。

是否有互惠枚举器,以便我们可以这样调用:

ActiveNodes.all

何时为用户提供节点选择?

注意(并警告所有考虑此问题的人):查找所有节点根本无法扩展

如果您有一个很好的用例,我们肯定会考虑让这更容易。但问题是,此时不会有任何关联可供浏览,因为不涉及模型。那时您可能只想使用 Query API:

Neo4j::Session.current.query.match(:n).where(n: {foo: 'bar'}).etc...

所有方法的文档都在这里:

http://neo4jrb.readthedocs.io/en/7.0.x/QueryClauseMethods.html

编辑:

正在根据您的评论编辑 post,因为评论空间不足 ;)

您的示例是您有一个 Product,并且您希望能够找到与相同关系类型链接的其他模型。这是我可能会做的:

class Product
  include Neo4j::ActiveNode

  has_one :out, :file, type: :RELATED_FILE, model_class: %i(ProductImage ProductVideo ProductPDF)

 # optionally
 has_one :out, :image_file, type: :RELATED_FILE, model_class: :ProductImage
 has_one :out, :video_file, type: :RELATED_FILE, model_class: :ProductVideo
 has_one :out, :pdf_file, type: :RELATED_FILE, model_class: :ProductPDF
end

这些也可以更改为 has_many,如果有多个关联的可能性,它们的工作方式是一样的。

然后你应该能够在视图中生成一个 select 标签,它有所有的选项,它会通过参数将 ID 传递给控制器​​,然后你可以这样做:

Product.create(name: 'or whatever props you have', file_id: params[:file_id])

如果关联是 has_many,您可以改为 file_ids: params[:file_ids]

您也可以考虑像这样从单个 class 继承那些关联模型:

class File
  include Neo4j::ActiveNode
end

class ProductImage < File
  # No need to `include Neo4j::ActiveNode`
end

然后你可以像我上面建议的那样做模型数组,或者你可以简单地做:

class Product
  include Neo4j::ActiveNode

  has_one :out, :file, type: :RELATED_FILE
end

model_class: :File 是根据协会名称假定的。如果你有 has_many 那么你的关联名称将是 :files 并且它仍然会假设 model_class: :File.

请注意,如果您这样做,关联模型(ProductImageProductVideoProductPDF)的节点也都将具有 File 标签因为继承。

作为一个单独的建模建议,我可能只有一个 Image 模型(例如)而不是 ProductImage,这样模型就可以被重新使用。