ActiveModelSerializer确实可以序列化嵌套的子对象。以下是使用ActiveModelSerializer序列化嵌套子对象的示例代码:
假设我们有两个模型:User和Post。User模型有多个Post模型作为其子对象。
首先,定义User和Post模型:
# app/models/user.rb
class User < ApplicationRecord
has_many :posts
end
# app/models/post.rb
class Post < ApplicationRecord
belongs_to :user
end
接下来,我们需要创建ActiveModelSerializer类来定义如何序列化User和Post模型。我们可以使用gem 'active_model_serializers'来实现这一点。
首先,安装active_model_serializers gem:
gem 'active_model_serializers'
然后,生成User和Post的ActiveModelSerializer:
rails g serializer User
rails g serializer Post
生成的UserSerializer和PostSerializer类将位于app/serializers目录下。
现在,我们可以定义UserSerializer和PostSerializer来序列化User和Post模型及其关联的子对象。
# app/serializers/user_serializer.rb
class UserSerializer < ActiveModel::Serializer
attributes :id, :name
has_many :posts
end
# app/serializers/post_serializer.rb
class PostSerializer < ActiveModel::Serializer
attributes :id, :title, :content
end
最后,在控制器的操作中使用UserSerializer来序列化User模型及其关联的Post模型:
# app/controllers/users_controller.rb
class UsersController < ApplicationController
def show
user = User.find(params[:id])
render json: user, serializer: UserSerializer
end
end
现在,当我们访问/users/:id时,将返回如下JSON响应:
{
"id": 1,
"name": "John Doe",
"posts": [
{
"id": 1,
"title": "First Post",
"content": "Hello World!"
},
{
"id": 2,
"title": "Second Post",
"content": "Goodbye World!"
}
]
}
如上所示,ActiveModelSerializer可以序列化嵌套的子对象。