Rails Active Model Serializer - AMS 0.10上的自定义串行器 - group_by

时间:2017-07-06 10:39:01

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

我已将active_model_serializer0.9.3更新为0.10.0,因为我想使用json_api适配器。更新后,我再也无法使用我的模型序列化程序和自定义序列化程序。这是我的回溯:

[active_model_serializers] Rendered GroupedProjectsSerializer with 
ActiveModelSerializers::Adapter::JsonApi (6.03ms)

Completed 500 Internal Server Error in 24ms (ActiveRecord: 0.3ms)

NoMethodError (undefined method `read_attribute_for_serialization' for 
#<Hash:0x007f90cbed0ba8>):...

我还尝试在自定义序列化程序中包含ActiveModel::Serialization,然后我收到另一个错误,如下所示:

NoMethodError (undefined method `id' for #<GroupedItemSerializer:0x007fa47012ad38>):...

添加attributes :id并不能解决问题。

这是我的设置:

初始化器:

ActiveModel::Serializer.config.adapter = :json_api

模型序列化程序:

class ItemSerializer < ActiveModel::Serializer
   attributes :id, :code, :name, :item_type, ....
end

自定义序列化程序:

class GroupedItemSerializer < ActiveModel::Serializer
   def serializable_object(options = {})
      @object.map do |group_key, items|
         [group_key, serialized_items(items)]
      end.to_h
   end

   private

   def serialized_items(items)
      items.map do |item|
         ItemSerializer.new(item, root: false)
      end
   end
end

控制器:

@items = Item.all.group_by(&:item_type)

# using each_serializer also doesn't help as it only uses the 
# GroupedItemserializer and not applying the ItemSerializer!
render json: @items, serializer: GroupedItemSerializer 

我不确定我是否遗漏了文档中的内容,但我已经尝试了所有可能的方法来实现这一目标。任何帮助将不胜感激。

0 个答案:

没有答案