【问题标题】:Use AMS Serializer as part of another JSON object将 AMS 序列化程序用作另一个 JSON 对象的一部分
【发布时间】:2015-07-29 15:42:03
【问题描述】:

是否可以使用现有的 ActiveModel::Serializer 类来创建哈希?

我在应用程序的某个部分使用 AMS 来处理渲染整个 JSON 对象,但在另一部分我希望能够手动构建 json 对象。即。

hash = {
  bla_bla: {
    # these attributes should be whatever is defined in the Serializer 
  }
}

这可能吗?

【问题讨论】:

  • 您可以使用serializer.serializable_hash获取序列化程序的哈希输出
  • @max 是的,但如果我想使用它,我必须做类似serializer = BlaSerializer.new(my_bla); adapter = FlattenJson.new(serializer) 之类的事情,我想避免这样做。我想知道是否有一种方法可以像render json: my_bla 这样获取默认值/配置值。
  • @max cont... 原因是,我想多次这样做,并且我不想手动编写序列化程序名称,指定适配器,检查它是否是一个集合所以我用 ArraySerializer 等包装它。

标签: ruby-on-rails active-model-serializers


【解决方案1】:

到目前为止我发现的唯一方法是这样做:

def serialize_data(resources)
  serializer_klass = ActiveModel::Serializer.serializer_for(resources)
  serializer = serializer_klass.new(resources)
  adapter = ActiveModel::Serializer::Adapter::FlattenJson.new(serializer)
  adapter.serializable_hash
end

它以哈希的形式为您提供资源属性。

在我的例子中,我会这样使用

hash = {
  bla: serialize_data(Bla.first)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多