ruby-on-rails - 如何让 Rails 4 在自定义序列化程序上使用嵌套根序列化 ActiveModel JSON?
问题描述
在 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 向后兼容性?
解决方案
通过删除自定义序列化程序类,我能够将 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 文档-> ActiveModel -> 序列化器 -> JSON。
推荐阅读
- python - 定义 Glop Solver 约束时出现“TypeError:'int' object is not subscriptable”?
- python - Python中有用户提供的键功能的字典吗?
- salesforce - 将自定义设置元数据部署到“企业”组织时出错 - Salesforce
- r - 积分和数值优化 (nlminb) R
- python - 当 Debug = False 时,Django 站点找不到管理样式或媒体文件
- .net - 使用 SQLQuery 在 .NET 应用程序中执行存储过程返回不正确的值
- powershell - 根据文件名和扩展名将文件移动到与文件名匹配的文件夹?
- c# - Assembly 认为它的位置在 TestResult 文件夹中
- email - 电子邮件中缺少“$template”参数
- c++ - 搜索向量成员 C++ 的前 n%