2011-11-23 4 views
1
require 'active_resource' 

class MyRsrc < ActiveResource::Base 
    self.site = "http://localhost:9292/api/0/category/sys_demo" 
    self.element_name = "myname" 
end 


# from https://github.com/anibalcucco/basecamp-wrapper/issues/11 
class Hash 
    def collect!(&block) 
    ret = [] 
    self.each {|key,val| 
     if val.kind_of? Array 
     val.collect!{|subval| 
      block.call subval 
     } 
     ret = val 
     end 
    } 
    return ret 
    end 
end 


r = MyRsrc.create(node_uri: 'http://api.example.com/api/nodes/4') 
=> #<MyRsrc:0x000000033a13f0 @attributes={"node"=>"http://api.example.com/api/nodes/4", "id"=>"42"}, @prefix_options={}, @persisted=false, @remote_errors=nil, @validation_context=nil, @errors=#<ActiveResource::Errors:0x0000000339a050 @base=#<MyRsrc:0x000000033a13f0 ...>, @messages={}>> 

r.errors.count 
=> 0 

r.errors.full_messages 
=> [] 

r.valid? 
=> true 

r.new? 
=> true 

r.persisted? 
=> false 

r.save 
=> true 

r.persisted? 
=> false 

왜 내 개체가 지속되지 않습니까?ActiveResource. 오류없이 생성하지만 지속되지 않습니다.

감사합니다.

+0

'.create' 라인이 오류 해시에 무엇인가를 보여주고있는 것 같습니다. 아마 그것을 검사 해보십시오. – cmwright

+0

r.errors.count => 0 r.errors.full_messages => [] – bshanks

답변

3

서버가 어떤 응답을 반환합니까? create는 다음과 같이 정의되어있다 :

  1. 응답 코드가 피검을 나타냅니다 경우

    def load_attributes_from_response(response) 
        if (response_code_allows_body?(response.code) && 
         (response['Content-Length'].nil? || response['Content-Length'] != "0") && 
         !response.body.nil? && response.body.strip.size > 0) 
        load(self.class.format.decode(response.body), true) 
        @persisted = true 
        end 
    end 
    

    그래서, 당신의 자원 persisted 세트가되지 않습니다

    def create 
        connection.post(collection_path, encode, self.class.headers).tap do |response| 
        self.id = id_from_response(response) 
        load_attributes_from_response(response) 
        end 
    end 
    

    load_attributes_from_response는 다음과 같이 정의된다 덜 응답

  2. 응답의 콘텐츠 길이가 없거나 0
  3. 응답 본문이 비어 있습니다.

이것은 시작 가능성이 높습니다.

관련 문제