【问题标题】:How do I get Rails 4 to serialize ActiveModel JSON with a nested root on a custom serializer?如何让 Rails 4 在自定义序列化程序上使用嵌套根序列化 ActiveModel JSON?
【发布时间】:2019-05-21 14:02:08
【问题描述】:

在 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"
}

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

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

【问题讨论】:

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


    【解决方案1】:

    通过删除自定义序列化程序类,我能够将 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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-23
      • 2014-08-02
      • 1970-01-01
      • 2019-05-07
      • 1970-01-01
      相关资源
      最近更新 更多