如何为同一模型创建自定义序列化程序?
我已经ShopSerializer
定义如下:
#serializers/shop_serializer.rb
class ShopSerializer < ActiveModel::Serializer
attributes :category,:name, ...#other attributes
belongs_to :country
end
我想定义一个包含所有关系的自定义项:
module Api
class ShopSerializer < ActiveModel::Serializer
attributes :category, ... other attributes
belongs_to :country
has_one :address
has_one :client_relation
has_many :events
has_many :services
has_many :descriptions
end
end
在controllers/v1/api/shops_controller.rb
中:
module V1
module Api
class ShopsController < ApiController
def show
@shop = Shop.some_fancy_method(params[:identifier])
render jsonapi: @shop, serializer: Api::ShopSerializer
end
end
end
end
,它失败并显示:
#<NoMethodError: undefined method `read_attribute_for_serialization' for #<Shop::ActiveRecord_Relation:0x00007f8e07d5cd88>>",
这是怎么回事?我想念什么?
谢谢。
答案 0 :(得分:0)
#<NoMethodError: undefined method `read_attribute_for_serialization' for #<Shop::ActiveRecord_Relation:0x00007f8e07d5cd88>>"
表示您要序列化包含商店内部的活动关系,而不仅仅是商店本身。
@shop应该返回单数商店吗?如果是这样,那么:
render jsonapi: @shop.first, serializer: Api::ShopSerializer
应该可以,但是显然最好首先修复@shop变量