我想决定在我的控制器中输出的属性数量.
但我不知道必须这样做吗?
controller.rb
respond_to do |format| if fields # less attributes : only a,c elsif xxx # default attributes else # all attributes : a,c,b,d,... end end
serializer.rb
class WeatherLogSerializer < ActiveModel::Serializer attributes :id,:temperature def temperature "Celsius: #{object.air_temperature.to_f}" end end
解决方法
我可能会为所有人使用不同的端点,但您也可以传入不同的url参数或类似的东西.通常情况下,我认为您希望默认值更加有限.
以下是我建议的方法:
调节器
所有人的不同终点
render json: objects,each_serializer: WeatherLogallSerializer
允许自定义字段
fields = params[:fields] # Csv string of specified fields. # pass the fields into the scope if fields.present? render json: objects,each_serializer: WeatherLogCustomSerializer,scope: fields else render json: objects,each_serializer: WeatherLogSerializer end
所有
class WeatherLogallSerializer < ActiveModel::Serializer attributes :id,:temperature,:precipitation,:precipitation has_many :measurements def temperature "Celsius: #{object.air_temperature.to_f}" end end
默认
class WeatherLogSerializer < ActiveModel::Serializer attributes :id,:temperature def temperature "Celsius: #{object.air_temperature.to_f}" end end
习惯
class WeatherLogCustomSerializer < WeatherLogSerializer def attributes data = super if scope scope.split(",").each do |field| if field == 'precipitation' data[:precipitation] = object.precipitation elsif field == 'humidity' data[:humidity] = object.humidity elsif field == 'measurements' data[:measurements] = ActiveModel::ArraySerializer.new(object.measurements) end end end data end end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。