Ruby on rails RoR:从响应中删除敏感字段
是否有任何方法可以从默认ActiveRecord“all”、“where”、“find”等默认ActiveRecord生成的结果集中删除敏感字段 在我用来学习ruby的一个小项目中,我在每个对象中都有一个对用户的引用,但出于安全原因,我不想公开用户的id。当我使用一个简单的HTML响应时,只需不使用它就可以很容易地删除用户id。但对于某些任务,我希望使用如下方式返回json:Ruby on rails RoR:从响应中删除敏感字段,ruby-on-rails,ruby,rails-activerecord,Ruby On Rails,Ruby,Rails Activerecord,是否有任何方法可以从默认ActiveRecord“all”、“where”、“find”等默认ActiveRecord生成的结果集中删除敏感字段 在我用来学习ruby的一个小项目中,我在每个对象中都有一个对用户的引用,但出于安全原因,我不想公开用户的id。当我使用一个简单的HTML响应时,只需不使用它就可以很容易地删除用户id。但对于某些任务,我希望使用如下方式返回json: def index @my_objects = MyObject.all respond_to do |for
def index
@my_objects = MyObject.all
respond_to do |format|
...
format.json { render json: @my_objects, ...}
...
end
end
如何防止列出用户id?有没有办法创建删除敏感字段的帮助器?您可以使用来限制JSON响应中序列化的属性
format.json { render json: @my_objects.as_json(only: [:id, :name]), ...}
如果希望将其设为默认值,则只需在模型本身中重写该方法即可
class MyObject
def serializable_hash(options = nil)
super((options || {}).merge(only: [:id, :name]))
end
end
尽管这种方法快速有效,但一旦你的应用程序变得足够大,足以拥有多个模型,并且可能对同一类型的对象具有不同的序列化,它就会很快变得无法维护
这就是为什么最好的方法是将序列化委托给序列化程序对象。这很容易,但是创建类需要一些额外的工作
序列化程序只是一个返回模型实例并返回JSON就绪哈希的对象。有几个可用的库,您也可以自己构建。太快了!我想现在我会使用as_json(除了:[:user_id]),但我会考虑这个序列化器对象。非常感谢。