有没有一种方法可以使用activemodel serializer在父级之外序列化嵌套属性?

m0rkklqb  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(274)

我升级了activemodel序列化程序,现在输出与以前不同。我正在尝试让json输出与以前的匹配。具体来说,我希望嵌套属性的对象与主对象处于同一级别。
例如,假设我的序列化程序如下所示:

class DishesSerializer < ActiveModel::Serializer
  has_many :ingredients
end

这将是当前输出:

{
  "dish": {
      "dish_stuff_1": "dish_stuff_1",
      "dish_stuff_2": "dish_stuff_2",
      "dish_stuff_3": "dish_stuff_3",
      "ingredients": {
          "ingredients_stuff_1": "ingredients_stuff_1"
      }
  }
}

我想要的是这样的:

{
  "dish": {
      "dish_stuff_1": "dish_stuff_1",
      "dish_stuff_2": "dish_stuff_2",
      "dish_stuff_3": "dish_stuff_3"
  }
  "ingredients": {
      "ingredients_stuff_1": "ingredients_stuff_1"
  }
}

我目前正在使用多个序列化程序在控制器中执行此操作,但这需要一些额外的查询,感觉不对劲。我觉得在ams中应该有一些简单的方法来实现这一点。我试过这样的方法:

def attributes
    hash = super
    hash.merge!(:dishes => dishes)
  end

但最终还是在同一层。
任何帮助都将不胜感激。

nbysray5

nbysray51#

在这种情况下,您不能创建一个新的序列化程序,其中包含您需要的所有数据—例如菜单序列化程序:

class MenuSerializer < ActiveModel::Serializer

  has_one :dish
  has_many :ingredients

end

不确定使用一个返回2个根元素的序列化程序是否是一个好主意,因为这将使将来很难重用。

相关问题