【问题标题】:Rails - AMS - Add key to every json response from controllerRails - AMS - 为控制器的每个 json 响应添加密钥
【发布时间】:2017-01-30 20:32:28
【问题描述】:

我正在将我的 Rails 应用程序更新到 active_model_serializers 0.10.4,但我在更新一个必要功能时遇到了问题:能够将请求信息添加到来自控制器的每个 json 响应。

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

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

【问题讨论】:

  • 嘿!我仍在使用 AMS 0.9.x 并尝试实现相同的功能。你能告诉我你是如何修改 default_serializer_options 方法来为每个请求添加元键的吗?谢谢!

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


【解决方案1】:

config/initializers/active_model_serializer.rb文件中添加这一行:

ActiveModel::Serializer.config.adapter = :json

下面的示例将在顶层添加一个数据属性,并在您的响应中呈现data 键下的@users 对象。

在你的控制器中:

  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 等,并可以选择在每个方法中添加其他详细信息

【讨论】:

    【解决方案2】:

    您能否举一个更具体的例子来说明您正在尝试做什么?您可以创建一个 ApplicationSerializer 并将 serialization_scope 设置为 :view_context 然后在序列化程序中执行您想要的任何操作。您还可以自定义 JSON 适配器。或者,如果您愿意,您可以在 SerializableResource 前面添加一个模块以添加选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-03
      • 1970-01-01
      相关资源
      最近更新 更多