是否有一种“优雅”的解决方案,可以使用同一控制器的动作来响应不同的字段集?

时间:2019-07-09 18:58:12

标签: ruby-on-rails api rubygems serializer

例如: 有API将数据提供给第三方服务和我们的客户端应用程序(Angular或React)。 / tickets端点在客户端应用的不同页面上使用,我们有可能将请求发送到同一端点。但是有严格的规则:对于这些页面,不必发送涵盖所有情况的通用规则集。不同的页面应使用不同的序列化器。

问题是:如何消除数据模型相同但序列化字段不同的许多不同的api端点(每个页面)?

1 个答案:

答案 0 :(得分:0)

可以使用不同的方式来完成,这就是我将使用的方式 ,通过使用活动模型序列化程序,您可以指定要使用的序列化程序

render json: @post, serializer: PostPreviewSerializer  

然后您可以使它动态化

render json: @post, serializer: suitable_serializer

并定义私有方法

 def param_identfier
   # here permit only the possible values for the param used 
 end

 def suitable_serializer
   "#{param_identfier}_serializer".classify.constantize
    # so you get the Serializers class you have defined 
    # so if param_identfier = hello it will be 'HelloSerializer'
 end