我有可能是一个基本的Q,但它在设置中看起来很复杂。我有一个包含一些类的模块。一个类包含API调用的方法。其他类描述服务器。例如,Dev有其属性。服务器类继承包含所有API调用的类。我使用服务器类的实例来使用这些方法之一,然后将EventMachine方法应用于它。这是服务器类的子集:
class PulseDev < ApiMethods
def base_uri
"http://myserver.com/api"
end
end
方法类中的一个动作:
Class ApiMethods
def get_json_api_post_response(url, post_obj={})
http = EM::Synchrony.sync EventMachine::HttpRequest.new(self.base_uri+"#{url}").post(:body => post_obj)
process_response self.class.post(url, :body => post_obj).body
end
def process_response(result)
response = ActiveSupport::JSON.decode(result)
if response["code"].to_i == 200
ToolResult.new(true, response["result"], 200)
else
ToolResult.new(false, response["result"], response["code"])
end
end
end
Class ToolResult < Struct.new(:success, :result, :code)
end
我在控制器中调用它:
http = ApiMethods::Dev.new.get_json_api_post_response('/handshake', @j)
好的,我的错误是未定义的方法`post&#39;对于ApiMethods :: PulseDev:Class 它指向我的get_json_api_post_response方法中的帖子。
我的问题是:我认为它是在ApiMethods :: Dev的上下文中,这就是为什么self.base_uri可以工作但是我应该如何处理process_response方法中的帖子以便它被束缚到EventMachine?有没有关于方法链接的东西,我没有看到?在错误输出中,我可以验证http是否显示EventMachine对象,因此新方法似乎正在工作。谢谢你的时间,山姆
答案 0 :(得分:0)
答案是更仔细地查看错误信息。 process_response方法实际上是调用EventMachine方法并处理其:body的方法。所以这是用不必要的电话写的。