我在我的 Rails API 中使用了活动模型序列化程序,但无法让嵌套序列化程序工作(我相信是因为我对同一资源有多个序列化程序(。 我的模型设置为:
class Program < ActiveRecord::Base
acts_as_paranoid
has_many :check_ins
end
class CheckIn < ActiveRecord::Base
has_one :weigh_in, dependent: :destroy
end
class WeighIn < ActiveRecord::Base
belongs_to :check_in
end
在我的ProgramsController
中,我有以下内容:
def index
programs = Client.find(params[:client_id]).programs
render json: programs, status: :ok, each_serializer: API::ProgramSerializer, include: "**"
end
在我的API::ProgramSerializer
中,我有以下内容:
class API::ProgramSerializer < ActiveModel::Serializer
attributes :created_at, :position, :id
has_many :check_ins, each_serializer: API::CheckInsIndexSerializer
end
我遇到的问题是我既有API::CheckInsIndexSerializer
又有API::CheckInSerializer
。似乎include: "**"
迫使 Rails 使用API::CheckInSerializer
,尽管我指定我想使用API::CheckInsIndexSerializer
。 有没有办法解决这个问题?
我能够通过修改以下内容ProgramsController
和API::ProgramSerializer
来解决此问题:
def index
programs = Client.find(params[:client_id]).programs
render json: programs, status: :ok, each_serializer: API::ProgramSerializer
end
class API::ProgramSerializer < ActiveModel::Serializer
attributes :created_at, :position, :id, :check_ins
def check_ins
ActiveModel::SerializableResource.new(object.check_ins, each_serializer: API::CheckInsIndexSerializer)
end
end
我必须删除include: "**"
并定义如何显式加载check_ins
。