Rails - AMS - 为控制器的每个json响应添加密钥

时间:2017-01-30 20:32:28

标签: ruby-on-rails active-model-serializers

我将我的Rails应用更新为active_model_serializers 0.10.4,但我无法更新必要的功能:能够向控制器的每个json响应添加请求信息。

在AMS 0.9.x中,我曾经使用default_serializer_options来做到这一点,但功能性已经消失,显然实现这一目标的唯一方法是手动将meta键添加到每个请求中。

有没有人找到解决方法来使这项工作?

2 个答案:

答案 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以添加选项。