2017-07-10 59 views
0

在我的rails應用程序中,我有2個「遠程模型」。這些模型不是active_record模型,並且使用API​​提供的gem在API上檢索。遠程模型中的序列化關係

我發送散列數據到庫中,並且庫以散列形式給我提供數據。我的問題是關於如何生成正確的哈希值

我的問題可以用以下2個模型來說明;

remote_user.rb

class RemoteUser 
    include ActiveModel::Model 
    include ActiveModel::Serialization 

attr_accessor(
    :Name 
    :Email 
    ...) 
end 

def attributes{ 'Name'=> nil,'Email'=>nil .....} 

attr_reader(:HeadquartersAdress) 

def HeadquartersAddress=(data={}) 
if data.is_a? RemoteAdresse 
    @HeadquartersAddress=data 
else 
    @HeadquartersAddress=RemoteAdresse.new(data) 
end 
end 

remote_adresse.rb

class RemoteAdresse 
    include ActiveModel::Model 
    include ActiveModel::Serialization 
    attr_accessor(
    :AddressLine1, 
    :AddressLine2, 
    :City, 
    :Region, 
    :PostalCode, 
    :Country 
) 

    def attributes 
    { 
     'AddressLine1'=>nil, 
     'AddressLine2'=>nil, 
     'City'=>nil, 
     'Region'=>nil, 
     'PostalCode'=>nil, 
     'Country'=>nil 
    } 
    end 
end 

測試:

test = RemoteUser.new Name: 'Foo' 
test.HeadquartersAddress=RemoteAddress.new City: 'singapour' 
test.serializable_hash 
>{"Name"=>"Foo","HeadquartersAddress"=>#<RemoteAdresse:0xa9c2ef8 
    @City="singapour"} 

我寧願:{ 「名稱」=> 「富」,」 HeadquartersAddress「=> { 」City「=」singapour「}}

嵌套對象(地址)未被序列化。我能做些什麼來使其序列化呢?

回答

1

如果我沒有弄錯,你需要包括關聯到serializable_hash調用就像這樣:

test = RemoteUser.new Name: 'Foo' 
test.HeadquartersAddress=RemoteAddress.new City: 'singapour' 
test.serializable_hash(include: :HeadquarterAddress) 

如果還是不行,總有覆蓋read_attribute_for_serialization的可能性,將它改編爲HeadquarterAddress屬性。

+0

謝謝!這正是我需要的。 – Syl