Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RoR:从响应中删除敏感字段_Ruby On Rails_Ruby_Rails Activerecord - Fatal编程技术网

Ruby on rails RoR:从响应中删除敏感字段

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

是否有任何方法可以从默认ActiveRecord“all”、“where”、“find”等默认ActiveRecord生成的结果集中删除敏感字段

在我用来学习ruby的一个小项目中,我在每个对象中都有一个对用户的引用,但出于安全原因,我不想公开用户的id。当我使用一个简单的HTML响应时,只需不使用它就可以很容易地删除用户id。但对于某些任务,我希望使用如下方式返回json:

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]),但我会考虑这个序列化器对象。非常感谢。