我已将active_model_serializer
从0.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
我不确定我是否遗漏了文档中的内容,但我已经尝试了所有可能的方法来实现这一目标。任何帮助将不胜感激。