0

我正在尝试为 Neo4j 的其余 api 编写一个包装器。我发现的其他 ORM 并没有完全完成我需要它们做的事情。我想要一些模仿 ActiveRecord 的东西,但是对于图形数据库。因此,当我执行“NeoRest.find(id=1)”之类的操作时,我希望它返回与该 id 对应的数据库记录,但我想将其作为 NeoRest 实例返回。我的代码如下。我浏览了整个网络,找不到任何可以帮助我的东西——希望这不是一个愚蠢的问题 =\

require 'net/http'
require 'uri'
require 'json'

class NeoRest

    def NeoRest.post(key = nil, value = nil)
#       NeoRest.new

        base_url= URI('http://localhost:7474/db/data/node/')

        response = Net::HTTP.post_form(base_url, {key => value})
        decode=JSON.parse(response.body)
        puts decode["self"]
        puts decode["data"]
    end #testrest
end #class

bob=NeoRest.post("name", "josh")
puts bob.class #=> nilclass -- want thiis to be =>NeoRest
4

2 回答 2

2

Ruby 方法返回最后一条语句的结果。在您的情况下,它将是puts(...)哪个返回nil

可能你想要这样的代码:

class NeoRest

    def self.post(key = nil, value = nil)
        new(key, value)
    end

    def initialize(key = nil, value = nil)

        base_url= URI('http://localhost:7474/db/data/node/')

        response = Net::HTTP.post_form(base_url, {key => value})
        @decode=JSON.parse(response.body)
    end
end
于 2013-05-12T20:46:42.457 回答
0

所以我最终得到了我需要的东西。我重新安排了一些事情,但是现在,在 .post 方法中,我调用了另一个方法,它实例化了一个 NeoRest 的对象,然后将从 REST 方法返回的信息传递给它。

class NeoRest
    def self.post(key = nil, value = nil)
        request = Net::HTTP::Post.new("/db/data/node/")
        response = @http.request(request)
        create_instance(response)
    end

    def self.create_instance(response)
        decode=JSON.parse(response.body)
        instance = self.new 
        instance.data=decode["data"]
        puts "created following instance"
        puts instance
        instance
    end
end
于 2013-05-13T03:10:31.933 回答