使用 AMS Serializer 作为另一个 JSON 对象的一部分

Use AMS Serializer as part of another JSON object

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

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

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

这可能吗?

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

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)
}