Neo4j和Neography - 在hash/openstruct对象中获取密码查询结果

Rub*_*gon 3 ruby-on-rails neo4j neography

我正在使用令人敬畏的neography gem并且遇到了将Cypher查询的结果转换为结构化对象的一个​​小问题(OpenStruct.new ...)

我不知道如何从列和数据查询结果创建哈希或OpenStruct

{"columns"=>["p.pd_challenge_id", "p.author_id"], "data"=>[["158", "88"], ["158", "90"], ["158", "99"], ["158", "95"], ["158", "97"]]}
Run Code Online (Sandbox Code Playgroud)

我无法从中创建可用的哈希.我尝试了几件事,包括

["data"].map{|x|{ "challenge_id" => x[1],"author_id"=>x[0]}}.to_json
Run Code Online (Sandbox Code Playgroud)

结果是

{{"challenge_id":158, "author_id":88}, {"challenge_id":158, "author_id":90}, {"challenge_id":158, "author_id":99}}    etc..   (to which I simply cannot convert to a hash or openstruct)
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是存储在struct对象中的类似内容,因此scaffolded视图可以不加修改地读取它:

{:challenge_id=>158, :author_id=>88}
{:challenge_id=>158, :author_id=>90}
{:challenge_id=>158, :author_id=>99}
Run Code Online (Sandbox Code Playgroud)

我的观点会寻找object.challenge_id

现在,我尝试在"challenge_id"上使用to_sym,但在使用.map方法时无效.

我试图在["数据"]上哈希[@mydata],这也行不通

是否有一种简单的方法可以将所有这些数据放入结构化对象(OpenStruct.new ..)中,这样我的表单就可以像读取活动记录查询的结果一样读取它?我可以用neo.get_node_properties做到这一点,但似乎无法让这个工作正常.

Max*_*rzi 6

假设您有两个节点,名称和标题.

cypher = "start n = node(1,2) return n.name as name, n.title as title"
results = @neo.execute_query(cypher)
{"columns"=>["name", "title"], "data"=>[["Marc", "awesome"], ["Tom", "chief"]]} 
Run Code Online (Sandbox Code Playgroud)

然后你拿走你的结果并做到这一点:

array_of_hashes = results["data"].map {|row| Hash[*results["columns"].zip(row).flatten] }
Run Code Online (Sandbox Code Playgroud)

哪个会让你:

[{"name"=>"Marc", "title"=>"awesome"}, {"name"=>"Tom", "title"=>"chief"}]

你可以在这里停下来......

objects = array_of_hashes.map{|m| OpenStruct.new(m)}

[#<OpenStruct name="Marc", title="awesome">, #<OpenStruct name="Tom", title="chief">]

然后您可以访问

objects.first.name >"马克"