为嵌套关联选择序列化程序



我在我的 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。 有没有办法解决这个问题?

我能够通过修改以下内容ProgramsControllerAPI::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

相关内容

最新更新