2012-03-12 99 views
1

我想使用的ActiveResource摆脱Unfuddle API的帐户信息Unfuddle API获取账户信息

URL是http://mydomain.unfuddle.com/api/v1/account

这是我的ActiveResource类

class Account < ActiveResource::Base 
    self.collection_name = "account" 
    self.site = "https://mydomain.unfuddle.com/api/v1" 
    self.user = "me" 
    self.password = "pass" 
end 

,如果我尝试获得我的账户信息与Account.all我会得到一个空阵列,但如果我尝试这

require 'net/https' 

UNFUDDLE_SETTINGS = { 
    :subdomain => 'mydomain', 
    :username => 'me', 
    :password => 'pass', 
    :ssl  => true 
} 

http = Net::HTTP.new("#{UNFUDDLE_SETTINGS[:subdomain]}.unfuddle.com",UNFUDDLE_SETTINGS[:ssl] ? 443 : 80) 

if UNFUDDLE_SETTINGS[:ssl] 
    http.use_ssl = true 
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE 
end 

begin 
    request = Net::HTTP::Get.new('/api/v1/account') 
    request.basic_auth UNFUDDLE_SETTINGS[:username], UNFUDDLE_SETTINGS[:password] 

    response = http.request(request) 
    if response.code == "200" 
    puts response.body 
    else 
    puts "HTTP Status Code: #{response.code}." 
    end 
rescue => e 
    puts e.message 
end 

我得到我的帐户信息,为什么ActiveResource方法无法正常工作?

**更新

我忘了指定我有这个问题https://github.com/rails/rails/issues/2318我用erikkallens黑客。

回答

2

这似乎是这个问题https://github.com/rails/rails/issues/2318,我试过vaskas解决方案,但它不工作,默认情况下,我不得不修改它。

class Account < ActiveResource::Base 
    self.collection_name = "account" 
    self.site = "https://mydomain.unfuddle.com/api/v1" 
    self.user = "me" 
    self.password = "pass" 
    self.format = AccountXMLFormatter.new 
end 

class AccountXMLFormatter 
    include ActiveResource::Formats::XmlFormat 
    def decode(xml) 
    [account: ActiveResource::Formats::XmlFormat.decode(xml)] 
    end 
end