我将我的Rails应用更新为active_model_serializers 0.10.4,但我无法更新必要的功能:能够向控制器的每个json响应添加请求信息。
在AMS 0.9.x中,我曾经使用default_serializer_options来做到这一点,但功能性已经消失,显然实现这一目标的唯一方法是手动将meta
键添加到每个请求中。
有没有人找到解决方法来使这项工作?
答案 0 :(得分:2)
在config/initializers/active_model_serializer.rb
文件中添加以下行:
ActiveModel::Serializer.config.adapter = :json
以下示例将在顶层添加数据属性,并在您的回复中在@users
键下呈现data
个对象。
在您的控制器中:
def index
@users = User.all
render json: @users, root: "data"
end
如果您要使用带有元标记的JSON API架构和包含每个响应对象的数据标记,只需将初始化程序更改为
ActiveModel::Serializer.config.adapter = :json_api
和控制器
def index
@users = User.all
@extra_meta = {"totalCount": @users.size}
render json: @users, root: "data", meta: default_meta_attributes(@users, @extra_meta)
end
在我的情况下,default_meta_attributes位于基本控制器中并合并了一些有关请求的详细信息,如current_user_id等,以及在每个方法中添加其他详细信息的选项
答案 1 :(得分:0)
您能举一个更具体的例子说明您尝试做什么吗?您可以创建一个ApplicationSerializer并将serialization_scope设置为:view_context
,然后在序列化程序中执行任何操作。您还可以自定义JSON适配器。或者,如果需要,可以将模块添加到SerializableResource以添加选项。