用于在浏览器alchemy.js中呈现图表数据的前端库需要GraphJSON格式的数据,该格式主要包含nodes
和edges
个顶级键
考虑Services
可以dependencies
(以及dependent_services
)的图表:
class Service
include Neo4j::ActiveNode
has_many :out, :dependencies, type: :DEPENDS_ON, model_class: :Service
has_many :in, :dependent_services, origin: :dependencies, model_class: :Service
end
在jbuilder模板中检索节点数据就像一个魅力:
nodes = ([service] + service.dependencies + service.dependent_services).uniq
json.nodes nodes do |node|
json.id node.id
json.name node.name
json.type node.class.to_s
json.url "#{url_for(node)}.json"
end
是否有一种简洁的方法来检索节点之间的边缘列表(关系)?
答案 0 :(得分:1)
我找到了一个相对优雅的解决方案,以防万一其他人正在寻找这个:
# Collect all relations into flat array
relations = [service.dependencies, service.dependent_services].map {|r| r.rels}.flatten
# Collect relation into edges array
json.edges relations.map do |edge|
json.source edge.start_node_id.to_s.to_i
json.target edge.end_node_id.to_s.to_i
json.caption edge.type
end
当然第二部分是jbuilder
特定的,但最重要的是.rels
属性,其中包含所有传出/传入关系的列表。
我正在使用neo4j
gem @ 9.0.7,文档可以在这里找到:https://github.com/neo4jrb/neo4j-core/wiki/Relationship