如何在 Rails 请求中定义稀疏字段集

How to define a Sparse Fieldset in a Rails request

是否有一种简单的方法来实现在 rails JSON 请求中请求 Sparse Fieldset

/some/endpoint.json?fields=id,name,favourite_colour

在你的控制器中你可以做类似的事情

render json: @sth, only: params[:fields].split(',').map(&:to_sym)

您还应该将其包装在一些强参数中,以禁止不存在的属性

(但我怀疑它是否是最佳解决方案)

我找到的一个解决方案是在序列化程序中执行此操作。

 module V2
   class BaseSerializer < ActiveModel::Serializer
     self.root = true

     def include?(field)
       if @options.key?(:fields)
         return @options[:fields].include? field.to_s
       end
       super field
     end
   end
 end