【问题标题】:Serialize relations in remote model序列化远程模型中的关系
【发布时间】:2017-12-14 07:04:08
【问题描述】:

在我的 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"}

我希望有:{"Name"=>"Foo","HeadquartersAddress"=>{ "城市"="新加坡"}}

嵌套对象(地址)未序列化。我该怎么做才能使其也序列化?

【问题讨论】:

    标签: ruby-on-rails api serialization


    【解决方案1】:

    如果我没有完全弄错,您需要像这样将与 serializable_hash 调用的关联包括在内:

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

    如果这不起作用,则始终可以覆盖 read_attribute_for_serialization 并将其调整为 HeadquarterAddress 属性。

    【讨论】:

    • 谢谢!这正是我所需要的。
    猜你喜欢
    • 2020-07-30
    • 2017-10-30
    • 2017-05-09
    • 1970-01-01
    • 1970-01-01
    • 2016-07-01
    • 2020-07-27
    • 2016-07-28
    • 2019-09-27
    相关资源
    最近更新 更多