ruby-on-rails - 为嵌套关联选择序列化程序
问题描述
我在我的 Rails API 中使用 Active Model Serializer,但无法让嵌套的序列化器工作(我相信是因为我有多个序列化器用于同一资源)。我的模型设置如下:
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: "**"
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
显式加载。
推荐阅读
- java - 如何修复错误:无法从“11.0.2”确定 java 版本。在特拉维斯?
- arrays - 使用 sqlite 数据库将字符串转换为 json 数组
- android - 在 android 项目中使用 Actions.xml
- sql - 删除给定日期中的重复行组合
- ios - 将字符串快速转换为日期后未显示日期
- c++ - shared_ptr C++ 可能存在内存泄漏
- javascript - Node.js 与 Express 的关系
- apache-kafka - 当您有多个服务实例监听一个主题时会发生什么?
- php - PHP Laravel 按月和年从数据库中提取数据
- batch-file - MS WINDOWS:声明 Tomcat9 的 setenv.bat 用于 THREDDS 服务器 - 我的语法有什么问题?