如何获得Rails 4在自定义序列化程序上使用嵌套根序列化ActiveModel JSON?

时间:2018-12-21 04:03:23

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

在Rails 3中,我的应用程序将模型名称作为根序列化了ActiveModel对象,例如:

{
  "car": {
    "id":29,
    "make":"Kia",
    "model":"Optima" }
}

其中配置如下:

#config/initializers/wrap_parameters.rb

ActiveSupport.on_load(:active_record) do
  self.include_root_in_json = true
end

我将初始化程序设置include_root_in_json保留为true,但是当我具有自定义的序列化程序类时,它将不再使用该模型作为JSON的根序列化:

#app/serializers/car_serializer.rb

class CarSerializer < ActiveModel::Serializer
  attributes :id, :make, :model
end

它的序列化方式是:

{
  "id":29,
  "make":"Kia",
  "model":"Optima"
}

我希望它使用名为root的序列化,但是需要自定义序列化程序以从序列化中删除一些敏感字段。

如何实现Rails 4中Rails 3的默认行为,以便保持API向后兼容性?

1 个答案:

答案 0 :(得分:0)

通过删除自定义序列化器类,我能够将JSON的根节点作为模型名称。为了将模型上的敏感字段排除在序列化为JSON之外,我在渲染时使用了except子句

# app/controllers/car_controller.rb

respond_to do |format|
  format.html # new.html.erb
  format.json { render json: @order, except: [:sensitive_field_1, :sensitive_field_2] }
end

请参见Rails 4.0 docs-> ActiveModel->序列化器-> JSON。