在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向后兼容性?
答案 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。